【问题标题】:Check what files a program reads from a computer (C++)检查程序从计算机读取的文件 (C++)
【发布时间】:2021-12-14 02:58:37
【问题描述】:

我有一个程序从计算机读取文件(由用户提供给它)并对这些文件执行操作。但是,该程序不起作用。我输入了一个具有有效路径的有效文件,程序说它正在读取这个有效文件,但是,它没有找到这些文件。我已经验证了我用来读取文件的方法有效。

所以,这提示了我的问题。 C++ 程序是否可以跟踪特定程序正在读取哪些文件,并告诉我它试图读取的路径?

【问题讨论】:

  • 您使用的是什么操作系统?
  • 在类 Unix 系统上,通常使用strace,它会产生大量输出记录所有系统调用,其中包括打开文件的调用。但在你的水平上,这可能是矫枉过正,提取必要的信息太困难了。建议:(1)使用绝对路径。 (2) 确保在 Windows 上使用双反斜杠,或者使用像 R"C:\temp\x.txt" 这样的原始字符串。 (3) 检查流的状态,和/或检查函数的返回值。
  • @DavidGrayson Linux- Kali linux

标签: c++ file


【解决方案1】:

对于 Linux,strace 实用程序就是答案(正如 Peter 在评论中提到的那样)。您可能已经安装了它,所以只需运行strace your_program_name,您就可以看到所有程序正在运行的系统调用,以及它们的参数和返回码。您应该关注open 调用。

【讨论】:

  • 另外,如果您想查看程序当前打开的所有文件,请查看lsof :-)
  • 我得到了这个工作,非常感谢。但是,我想知道这是否是最好的方法,因为我听说 strace 会减慢程序的执行速度,现在当我在其他程序上运行它时,需要很长时间才能打开文件打电话,这个项目的可行性太长了。你有什么替代品可以推荐吗?
  • 试试strace -e open;据说只会打印open 调用。如果这仍然太慢,您可能应该将调试代码(例如printf)添加到代码中您打开文件的位置。 strace绝对是调试开发用的;在生产/正常操作期间我不会让它打开。
  • 谢谢,工作得更快了!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 2017-07-11
  • 2016-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多