2

假设我有一个由积分变量上的几个“基本”算法组成的程序,例如:

if(a<b)
   a += c;

有没有一种工具可以让我在运行时自动记录对不同变量所做的所有更改?

例如,它会在这种情况下显示在日志文件中:

 "condition passed because 5=a < b=10
     a += 10; because c=10"

或一些等价物。

我知道我可以手动记录每个操作,但这太复杂了。有什么工具可以让我做这样的事情吗?只要不是完全手动的,我就不关心重构/重新编译。

4

2 回答 2

1

您可以编写自己的整数类,相应地重载运算符(使用自动日志记录)。如果该类还提供隐式转换(从 int 的构造函数和到 int 的转换运算符),那么您“只”需要更改变量和参数的类型以自动记录。但是,您只能记录地址(或从它派生的东西,如 var20),而不是名称。在#define 的帮助下,您可以轻松地在原始整数(无日志记录)或带日志记录的整数类之间切换。

要将变量的名称也放入日志记录中,要么必须使用宏重写运算符,例如

if (LESS(a,b))
    INC(a,c)

或者有一个解析器自动将你的代码转换成这样的东西。但我不知道有任何现有工具提供此功能。

于 2012-10-23T19:21:28.977 回答
0

我很难想象像这样记录程序的完整执行会很有用。一个简单的std::cout << "hello, world!\n";会产生大量无用的日志。

你实际上需要做什么?如果您想调试代码,您可能应该使用调试器在程序运行时检查程序,而不是使用 printf-debugging-gone-horribly-wrong 策略。如果您想要一种方法来描述完整的执行以供以后检查/操作,您可以确保程序的行为具有确定性并只保存程序输入。

正确的解决方案取决于实际问题,但完整的执行记录不可能是解决任何问题的正确解决方案。

于 2012-10-23T19:51:13.287 回答