3

这个想法是,给定程序的特定输入,我想以某种方式自动介入整个程序并转储其控制流以及所有正在使用的数据,如类及其变量。他们是一种直接的方法吗?或者这可以通过 gdb 上的一些脚本来完成,还是需要在 gdb 中进行修改?

好的,这个问题的原因是因为关于调试工具的想法。它的作用是这样的。给定程序的两种不同输入,一种导致不正确的输出,另一种导致正确的输出,它将告诉控制流的哪一部分对它们不同。

所以我认为需要将这两个控制流完全转储到差异引擎中。如果这两个输入遵循相似的控制流,那么它们的差异(在许多情况下)会很好地说明为什么存在错误。

这可以成为一个非常吸引人的工具,在此基础上构建了许多功能。

4

3 回答 3

2

告诉我们更多关于环境的信息。例如,dtrace 将在 Solaris 或 Leopard 中完成这项工作。gprof 是另一种可能性。

可以使用yes(1)expect(1)来完成这种颠簸版本。

如果您想花哨,可以在某些版本中使用 Python 编写 GDB 脚本。

于 2009-04-18T21:09:36.080 回答
2

您所描述的内容听起来有点像 gdb 的“跟踪点调试”。请参阅 gdb 的内部帮助“帮助跟踪点”。您还可以在此处查看白皮书:http: //sourceware.org/gdb/talks/esc-west-1999/

不幸的是,目前还没有为本地调试实现此功能,但我相信 CodeSourcery 正在为此做一些工作。

于 2009-10-09T19:59:13.113 回答
1

看看这个,与 Coverity 不同,Fenris 是免费的并且被广泛使用。

如何在 GDB 中自动打印下 N 个执行的行?

于 2009-07-14T02:59:03.407 回答