我有一些遗留的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
的“ - 工序”标志是不是真实的,当然,但也许某种方式来告诉它来记录所有步骤做存在。有什么想法吗?谢谢!
非常感谢!我收集到,如果出于某种原因想要声明(也可能定义)函数在使用-finstrument-functions标志编译的源文件中输入和退出,则可以使用属性no_instrument_function声明它们,以免溢出调用通过你会得到的无限递归堆栈。 – josh
是的,不处理这些调用的属性应该也能正常工作。有一件事我没有留意 - 看到你标记了C++,你需要声明这些'extern“C”'。另外 - 最好如果你编译并使用'-g'链接,以充分利用符号解析。 – mah