-2

我有一个具有两个版本的 C++ 程序,一个版本的功能正在运行,而另一个版本则没有。有没有办法调试这两个版本之间的差异?具体来说,我使用的是 Linux 和 g++。有没有办法使用KCachegrind之类的东西来查看差异调用图?或者 gdb 中有什么东西可以更快地查看这些函数调用的差异吗?

更新中...该程序太大,无法查看所有差异。首先,我想知道函数调用差异之间的路径,然后我将可以选择仅在此函数中执行 diff 命令。

4

3 回答 3

2

我推荐的是编写最简单的工作测试输入,它会导致新版本失败但旧版本成功。一旦你有了这个测试用例,从你的源存储库中的不同中间提交构建中间版本(我建议做一个二进制搜索来限制重新编译的数量,git bisect如果你碰巧使用,这是一个很好的工具git)。

一旦隔离了有问题的提交,请仔细查看它,或者在必要时使用调试器通过测试输入来跟踪代码。希望您最终应该得到一个相对较小的更改来验证。

于 2013-02-06T21:52:13.963 回答
1

使用 gdb 最接近的方法是使用多进程调试 [1] 和一些自定义 gdb 和 python 脚本,至少有一个这样的例子以这种方式使用 gdb [2]

我认为它不太可能按您的意愿工作。虽然如果你决定以这种方式使用 gdb,它可能会给你一些想法。

[1] http://sourceware.org/gdb/current/onlinedocs/gdb/Inferiors-and-Programs.html#Inferiors-and-Programs

[2] http://gitorious.org/misc-gdb-stuff/misc-gdb-stuff/trees/master/misc_gdb/lockstep

于 2013-02-06T23:01:35.993 回答
1

你考虑过使用 gprof 吗?一旦你安装了它(我相信大多数专业发行版默认都有它)用'-pg'选项编译你的代码。当您运行可执行文件时,它将生成一个 gmon.out 文件,其中包含分析信息,包括调用图。

查看本教程以更好地了解其工作原理。

于 2013-02-19T01:30:37.610 回答