C++宏记录每行代码

Kar*_*k S 16 c c++ macros logging

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

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

a = a + b;
Run Code Online (Sandbox Code Playgroud)

日志会说:

"a = a + b; (a = 5 + 3)"
Run Code Online (Sandbox Code Playgroud)

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

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

rou*_*nin 18

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

  void __cyg_profile_func_enter (void *this_fn, void *call_site);
Run Code Online (Sandbox Code Playgroud)

   void __cyg_profile_func_exit  (void *this_fn, void *call_site);
Run Code Online (Sandbox Code Playgroud)

功能进入和退出.

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

  • MSVC++ 有 `/Gh` 和 `/GH` 用于 `_penter()` 和 `_pexit()` 函数,它们分别在每个函数的开头和结尾被调用:http://msdn.microsoft.com/en -us/library/c63a9b7h.aspx (2认同)