【问题标题】:is there a tool to log the code execution?是否有记录代码执行的工具?
【发布时间】:2012-10-23 16:37:18
【问题描述】:

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

if(a<b)
   a += c;

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

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

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

或类似的东西。

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

【问题讨论】:

标签: c++


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2022-06-30
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      相关资源
      最近更新 更多