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]