假设我有一个由积分变量的几个“基本”算法组成的程序,例如:
if(a<b)
a += c;
是否有工具可以让我自动记录在运行时对不同变量所做的所有更改?
例如,它会在日志文件中显示:
"condition passed because 5=a < b=10
a += 10; because c=10"
或某些等价物。
我知道我可以手动记录每个操作,但这太复杂了。 有没有什么工具可以让我做那样的事情?我不关心重构/重新编译,只要它不是完全手动的。
答案 0 :(得分:1)
您可以编写自己的整数类,相应地重载运算符(使用自动日志记录)。如果类还提供隐式转换(从int构造函数和转换运算符到int),那么您“只”需要更改变量和参数的类型以自动记录值。但是,除了名称之外,您只能记录地址(或者从var20中获取的内容)。在#define的帮助下,您可以轻松地在原始整数(不记录日志)或带记录的整数类之间切换。
要将变量的名称也记入日志记录,要么必须用宏重写运算符,如
if (LESS(a,b))
INC(a,c)
或者有一个解析器可以自动将代码转换为这样的代码。但我不知道有任何现有工具提供此功能。
答案 1 :(得分:0)
我很难想象记录像这样的程序的完整执行会很有用。一个简单的std::cout << "hello, world!\n";
会产生大量无用的日志。
你真的需要做什么?如果你想调试代码,你可能应该使用调试器来检查程序运行,而不是使用printf-debugging-gone-horribly-wrong策略。如果您想要一种方法来描述完整的执行以便以后的检查/操作,您可以确保程序具有确定性,并且只保存程序输入。
正确的解决方案取决于实际问题,但完全执行日志记录不太可能是任何事情的正确解决方案。