通过gdb打印完整的控制流,包括变量值

时间:2009-04-18 18:20:35

标签: dynamic gdb call-graph

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

可以使用是(1)期望(1)来完成这个版本。

如果你想在某些版本中获得幻想,GDB can be scripted with Python

答案 1 :(得分:2)

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

不幸的是,目前尚未实现此功能 本机调试,但我相信CodeSourcery正在做一些工作 在它上面。

答案 2 :(得分:1)

检查这个,与Coverity不同,Fenris是免费的,并且广泛使用..

How to print the next N executed lines automatically in GDB?