是否有一个记录代码执行的工具?

时间:2012-10-23 16:37:18

标签: c++

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

if(a<b)
   a += c;

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

例如,它会在日志文件中显示:

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

或某些等价物。

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

2 个答案:

答案 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策略。如果您想要一种方法来描述完整的执行以便以后的检查/操作,您可以确保程序具有确定性,并且只保存程序输入。

正确的解决方案取决于实际问题,但完全执行日志记录不太可能是任何事情的正确解决方案。