【发布时间】:2017-10-16 02:53:45
【问题描述】:
GCC 有一个auto-instrument options for function entry/exit.
-finstrument-functions 生成用于进入和退出函数的检测调用。就在函数入口之后和函数之前 退出,将调用以下分析函数 当前函数的地址及其调用站点。 (在某些平台上, __builtin_return_address 在当前函数之外不起作用,因此调用站点信息可能无法用于分析 否则起作用。) void __cyg_profile_func_enter (void *this_fn, 无效 *call_site); 无效__cyg_profile_func_exit(无效*this_fn, 无效 *call_site);
我希望每个"basic block" 都有这样的东西,这样我就可以动态记录每个分支的执行情况。
我该怎么做?
【问题讨论】:
-
你不能。至少不是单独使用 GCC。
-
@EugeneSh。如何做到这一点的大致轮廓是什么?我在想:代码 -> 预处理器输出 -> 使用 Python 在每个
{}添加自己的函数 -> 继续编译。 . .还有其他方法吗? -
有些人会反对,但您可以使用一些宏来包围感兴趣的块。那么,是的,您将只使用 GCC。
-
我看到的主要问题是
{}的存在既不是“基本块”的必要属性,也不是足够的属性。 -
然后只需搜索/替换
{到BLOCK_START和}到BLOCK_END。好吧,在数组初始化的情况下,它可能会有一些误报......
标签: c++ c gcc instrumentation