【发布时间】:2014-09-18 08:12:28
【问题描述】:
在某些情况下,经过一些更改后,应用程序的输出不再有效。一些输出值是错误的。用于计算这些输出的值是正确的,但在复杂的处理过程中,某些时候会出现错误的情况。
是否有工具可以跟踪 C++ 变量值的来源?我以前使用 valgrind 来跟踪 NULL 值,但我想要的是更通用的东西。 是否有更通用的工具可以显示导致变量在某个时间点具有其值的赋值链(或树)?
PS:该代码与几乎所有遗留代码一样,难以遵循,没有单元测试等。
编辑:变量上的数据断点只会显示链中的端点。多一点就好了。
【问题讨论】:
-
为什么“遗留代码”如此难以理解?语言 cmets 是新功能吗?
-
嗯,从某种意义上说,该变量的值可能取决于您程序的整个先前历史。任何可以计算出这样一棵树的东西都可能产生一些非常大的结果......
-
这是一个奇怪的现象。偶尔你会接到猎头电话,解释说某些投资银行或其他银行有“大量遗留代码”需要重构。这真正意味着它是被一群在阴沟里学会了语言的人一起破解的。我猜想今天写的很多代码在未来几年都会是类似的。那部电话肯定会继续响铃。让我们都停止编写遗留代码!
-
根据应用程序的类型,这介于“容易”到“非常困难”之间。变量可以通过多种不同的方式改变,如果你写一些东西来“跟踪一个变量”,我几乎可以保证我可以写一些东西让你的应用程序不知道发生了什么,然后你想出更聪明的东西,我想出了更聪明的东西。没有简单的答案,唯一的出路是跟踪您的计算,使用调试器 - 记录您进行的过程,无论是单独还是在代码中。
-
@pau.estalella 我的意思是,“确切的分配顺序”可能是一个巨大的图,它的实际价值很小。