c++宏记录每一行代码
C++ macro to log every line of code
在我最近与经理的一次讨论中,他提到他以前的一个客户使用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);
用于函数的进入和退出。
文档解释了如何使用它。我不知道其他编译器是否提供类似的功能。
您可以检查BOOST_CHECKA如何从Boost。测试完成。在内部它使用表达式模板。
为测试:#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]
相关文章:
- 读取最后一行代码算法 - c++ 时出现问题
- 需要将一行代码从C++ Qt翻译成PyQt
- 在一行代码中理解 index++
- 我可以在一行代码中将向量中与条件匹配的所有元素插入到集合中吗?
- a = !5 < a;在这一行代码中究竟做了什么?
- std::vector 从一行代码清空到下一行代码
- 我如何使一行代码可以选择,但在已经选择过一次后不重新选择
- C++在 while 循环后添加一行代码会导致错误
- 一行代码的Arduino运行时间
- 如何在一行代码中使用花括号语法创建带有QJsonObjects的QJsonArray
- 是否可以使用一行代码从 std::cin 中提取格式化输入
- 有人可以解释一下工会在这一行代码中是如何工作的,以及数字是如何交换的
- 如何用一行代码连接两个矢量
- 为什么在这一行代码中同时使用 EOF 和 '