c++宏记录每一行代码

C++ macro to log every line of code

本文关键字:一行 代码 记录 c++      更新时间:2023-10-16

在我最近与经理的一次讨论中,他提到他以前的一个客户使用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]