在我最近与我的经理的一次讨论中,他提到他的一位前客户使用C ++宏来记录每行代码的信息。他们所要做的就是在开始运行之前启用环境变量。 (当然,环境变量仅在测试床中启用。
日志中提到了使用的变量及其对应的值。 例如,对于行:
a = a + b;
日志会说:
"a = a + b; (a = 5 + 3)"
就个人而言,我不确定这是否可行,但他非常确定这已经存在,尽管他不记得代码的具体细节。
所以,这是(显而易见的)问题:这可能吗?你能提供这个代码吗?
答案 0 :(得分:18)
我不知道是否可以像这样扩展每一行/变量,但可以记录函数调用。我已使用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);
用于进入和退出功能。
The docs explain how to use it.我不知道其他编译器是否提供类似的东西。
答案 1 :(得分:0)
您可以查看BOOST_CHECKA from Boost.Test is implemented的方式。在内部,它使用表达模板。
进行测试:
#define BOOST_TEST_MAIN
#include <boost/test/included/unit_test.hpp>
#include <boost/test/test_tools.hpp>
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]