C ++宏记录每行代码

在我最近与我的经理的一次讨论中,他提到他的一位前客户使用C ++宏来记录每行代码的信息。 他们所要做的就是在开始运行之前启用环境变量。 (当然,环境变量仅在测试床中启用。

日志中提到了使用的变量及其对应的值。 例如,对于该行:

a = a + b; 

日志会说:

 "a = a + b; (a = 5 + 3)" 

就个人而言,我不确定这是否可能,但他非常确定这已经存在,尽管他不记得代码的具体细节。

所以,这是(显而易见的)问题:这可能吗? 你能提供这个代码吗?

我不知道是否可以像这样扩展每一行/变量,但可以记录函数调用。 我已经使用gcc的-finstrument-functions选项记录了所有函数调用。 它会打电话给:

  void __cyg_profile_func_enter (void *this_fn, void *call_site); 

  void __cyg_profile_func_exit (void *this_fn, void *call_site); 

function进入和退出。

文档解释了如何使用它。 我不知道其他编译器是否提供类似的东西。

您可以检查Boost.Test中的BOOST_CHECKA是如何实现的 。 在内部,它使用表达式模板。

测试:

 #define BOOST_TEST_MAIN #include  #include  BOOST_AUTO_TEST_CASE(test1) { int a=0; int b=1; int c=2; BOOST_CHECKA( a+b == c ); } 

输出是:

 Running 1 test case... main.cpp(11): error: in "test1": check a+b == c failed [0+1!=2] *** 1 failure detected in test suite "Master Test Suite" 

注意方括号中的值: [0 + 1!= 2]

它有一些局限性。

测试:

 BOOST_CHECKA( (a+b) == c ); 

输出是:

 check (a+b) == c failed [1!=2]