如何获取程序执行打开和关闭的文件列表?

时间:2014-05-06 04:58:04

标签: c++ c file logging

我有一个程序的源代码。源代码非常庞大,用C / C ++编写。我有修改源代码的凭据,编译并执行它。

我想知道执行该程序时打开和关闭的所有文件的文件名。如果此列表按文件操作发生的顺序排序,那将是一个加号。

如何获取此信息?是否有一些我需要使用的监控工具,或者我可以将库调用注入C ++代码来实现这一目标吗?代码太大而且很复杂,无法搜索每个文件打开/关闭调用并在那里添加printf。或者在文件打开API调用中添加伪宏也可能很困难。

请注意,这与查看进程当前打开的文件不同。我知道StackOverflow上已经解决了这个问题的许多问题(使用lsof或/ proc等)。

3 个答案:

答案 0 :(得分:3)

您可以使用strace,如下所示

$ strace -e trace=open,close -o /tmp/trace.log <your_program> <program_options>

在文件/tmp/trace.log中,您将获得程序完成的所有打开,关闭操作。

答案 1 :(得分:1)

除了strace之外,您还可以使用interposition来拦截打开/关闭系统调用。如果你谷歌为&#34;插入共享库linux&#34;你还会得到许多其他参考资料。

答案 2 :(得分:0)

我理解您要确定静态给定的源代码可以打开哪些文件(对于其编译程序的多次运行)。

如果您只想动态了解特定投放,请strace(1)和/或Rohaninterposition作为answered Kec的答案ltrace(1) }。请注意,std::ifstream也可能有用,也许更相关(因为您将跟踪stdio或C ++库调用)。


首先,程序可以(并且很多程序)打开一个名称是某个输入(或某个程序参数)的文件。然后,您无法将该任意文件名添加到列表中。

您可以#define fopen#define open来打印邮件。您可以使用LD_PRELOAD技巧覆盖openfopen

如果在C ++中,程序可能会使用MELT等打开文件......

您可以考虑使用{{3}}自定义GCC编译器来帮助您......