我知道 -finstrument-functions
:
生成用于进入和退出函数的检测调用。在函数进入之后和函数退出之前,将使用当前函数的地址及其调用站点调用以下分析函数。 (在某些平台上,__builtin_return_address 在当前函数之外不起作用,因此调用站点信息可能无法用于分析函数。)
但这只输出函数和调用者的地址,而不是函数的任何输入或输出。
void __cyg_profile_func_enter (void *this_fn,
void *call_site);
void __cyg_profile_func_exit (void *this_fn,
void *call_site);
我要cout <<
参数,以便我可以进行白盒/集成测试:测试一组函数的输入和输出沿着执行路径以响应事件。
我知道我可以通过在我想要的函数上运行 Python 脚本来完成我想要的检测。
问题
但是有没有一种方法可以仅使用 gcc
来完成此检测?选项?
想法
仅使用 gcc
即可完成此操作和 C++,我想我需要一种方法来遍历函数的参数,这样我就可以调用每个对象的 <<
运营商。
最佳答案
is there a way to accomplish this instrumentation using only gcc options?
没有。
-finstrument-functions
标志对所有定义的函数执行传递,并向每个函数插入一些代码。
您想将该传递扩展为“对于每个函数,遍历其所有参数,并为每个参数插入额外的代码”。
我认为 GCC 中不存在此类功能,因此您必须构建自定义 GCC pass(这不是一个微不足道的提议)。
此外,“cout << arg”不是 GCC pass 可以做的事情——您的 pass 必须找出许多重载的 cout::operator<<(...)
中的哪一个。要调用的方法,但并非每种类型都可以通过这种方式进行流式处理。
关于c++ - gcc instrumentation - 是否可以自动输出函数的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58169256/