2

我有一个 C++ 二进制文件(GNU LilyPond),它偶尔会为相同的输入生成不同的输出。对二进制文件进行 valgrinding 无助于追踪此模糊发生的位置,也无助于读取 gprof 数据。非常有用的是一个分析工具,它可以比较同一程序在同一输入上的多次运行,并识别参数和函数返回值的分歧(甚至可能是函数被调用的次数和/或哪些函数被调用什么时候)。多个程序运行之间的一种智能“差异”文件。调试数据太大而无法手动发现,因此某种类型的合成工具会非常有帮助。有谁知道可以完成此类任务的工具?

4

1 回答 1

0

我所知道的最接近的东西是一个类似代码覆盖的工具,但我最近还没有使用足够多的工具来提出建议。

不过,我们或许可以做出一些猜测。最可能的候选者是未定义的行为、未初始化的内存以及可能的浮点数学。

如果您启用尽可能多的警告,您可能会检测到某些形式的 UB,如果这恰好是原因,那么您可能会检测到之前偷偷通过的 UB。

否则,我认为您将被困在必须在各个点转储程序状态并比较每个检查点以查看分歧发生的位置。

于 2012-09-13T14:24:02.847 回答