输出函数调用日志文件
Output function calls to log file
我有一些遗留的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/了解更多详细信息。
相关文章:
- 加快在C++中读取/处理日志文件的速度
- 如何将消息时间戳写入日志文件?
- 分析包含 NMEA 句子的日志文件C++
- 如何从日志文件中抓取状态代码?(在 C++ 中)
- 未创建日志文件
- 尝试使用 EvtSetChannelConfigProperty() 函数更新最大事件日志文件大小时插入的错误值
- 提升日志:文件轮换
- POSIX C/C++日志文件(VEX V5 Brain)
- boost日志文件无法创建sample.log文件
- 哪个更适合从C++写入敏感的日志文件,在文件描述符上写()或文件上的fprintf()?
- 如何编写日志文件,以便可以使用记事本实时读取它以进行C++
- 如何在QT中使用DEBUG对齐日志文件中的数据?
- BOOST ::日志是每次运行应用程序时都可能旋转文件
- Qt - 如何在 30 天后删除日志文件,文件名不固定
- Mac OS X:应用程序可以创建日志文件
- 将断言消息写入日志文件
- 独立 exe:磁盘上保存配置文件和日志的位置
- 检查日志文件以找出 vcredist.exe 安装失败的原因
- C++类似cout的函数,将数据写入文件(日志记录)
- 高效的文件日志记录方式