检测执行流分歧

时间:2015-05-20 13:37:53

标签: c++ debugging gdb

我有一个应用程序,它应该在给定相同输入的情况下产生相同的输出,但它会在执行时产生不同的输出。

是否可以使用GDB来检测执行之间的差异?是否可以实现自动化?

2 个答案:

答案 0 :(得分:2)

  

是否可以使用GDB来检测执行之间的差异?

如果应用程序是单线程的,reverse debugging可以提供帮助。有关使用UndoDB的示例,请参阅this article

您还应该使用Valgrind或MemorySantizer确保没有未初始化的内存读取。

如果应用程序是多线程的,则反向调试不太可能有帮助,但ThreadSanitizer等数据竞争检测器可能会有所帮助。

  

是否可以实现自动化?

你可以(而且应该)经常在你的测试套件上运行{地址,内存,线程} Sanitizer(你有一个测试套件,对吧?)。

通过反向调试,不需要进一步的自动化。

答案 1 :(得分:1)

如果您没有根据系统状态进行可能返回不同结果的系统调用,则程序中某处可能存在未定义的行为。

除了逐步运行您的应用程序以找到问题之外,您无法使用GDB做多少。我推荐你UndoDB为你的情况,它是一个很好的具有可逆执行功能的调试器。

正如@Employed Russian指出的那样,你应该运行一些工具来测试未初始化的内存,这是导致未定义行为的最常见原因之一。