输出函数调用日志文件

Output function calls to log file

本文关键字:文件 日志 函数调用 输出      更新时间:2023-10-16

我有一些遗留的C++代码已经好几年没有维护了。我现在正在努力学习它是如何运作的。它接受.xml输入,并且应该吐出一个输出文本文件。处理两个不同的.xml输入文件所花费的时间大不相同,其中一个运行正常,另一个运行不正常。不过,它们的开头是一样的。当我用两个不同的输入执行代码时,我想输出函数调用的日志文件,并将这些日志相互比较,看看它们从哪里开始偏离。我不能直接在main()的第一行中断代码,然后逐步完成gdb中的控制流。这花的时间太长了。理想情况下,我想找到一种方法来做一些类似的事情

gdb --args old_exec inp1.xml -step >log1.txt
gdb --args old_exec inp2.xml -step >log2.txt
diff log1.txt log2.txt

当然,"-step"标志不是真的,但也许有某种方法可以告诉它记录所有步骤。有什么想法吗?谢谢

GCC编译器有一个标志-finstrument-functions,它使函数在进入和退出时调用特定的函数;您可以使用它来跟踪代码流。使用此标志时,您需要提供以下功能:

void __cyg_profile_func_enter (void *this_fn, void *call_site);
void __cyg_profile_func_exit  (void *this_fn, void *call_site);

,请记住,在编译这些函数时,不能使用入侵标志进行编译

您可以使用addr2line将指针转换为文件/函数/行号。通常最好在运行时记录原始指针,并执行死后地址转换。

请参阅http://balau82.wordpress.com/2010/10/06/trace-and-profile-function-calls-with-gcc/了解更多详细信息。