gpt4 book ai didi

c++ - 输出函数调用到日志文件

转载 作者:搜寻专家 更新时间:2023-10-31 01:52:45 26 4
gpt4 key购买 nike

我有一些多年未维护的遗留 C++ 代码。我正在尝试了解它目前的功能。它需要 .xml 输入,并且应该吐出一个输出文本文件。两个不同的 .xml 输入文件处理时间截然不同,其中一个可以正常运行,而另一个则不能。他们开始是一样的。我想输出当我使用两个不同的输入执行代码时所做的函数调用的日志文件,并将这些日志相互比较以查看它们开始分歧的位置。我不能直接在 main() 的第一行中断代码并逐步执行 gdb 中的控制流。时间太长了。理想情况下,我想找到一种方法来做类似的事情


gdb --args old_exec inp1.xml -step >log1.txt<br/>
gdb --args old_exec inp2.xml -step >log2.txt<br/>
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);

请记住,当您编译这些函数时,它们不能使用 intrumentation 标志进行编译!

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

参见 http://balau82.wordpress.com/2010/10/06/trace-and-profile-function-calls-with-gcc/了解更多详情。

关于c++ - 输出函数调用到日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12162587/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com