c++ - gcc instrumentation - 是否可以自动输出函数的参数?

标签 c++ gcc

我知道 -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/

相关文章:

c++ - 无法使用 seekdir() 设置流位置

c++ - 用没有 ‘ ’ 或 ‘\n’ 的 int[10] 写入文件,当我读取它时,有什么不对吗?

c++ - 如何测试 std::thread 是否被移出?

c++ - 在到达 main() 函数之前,通过所有嵌套函数重新抛出异常是一种好习惯吗?

c++ - 工厂应该负责重建序列化对象吗?

c++ - 当数字范围超过 40 时出现堆栈溢出错误

c - gcc -u 符号编译器选项

c - 在 GCC 中使用 {0} 初始化时出现奇怪的段错误

c++ - 如何使用 gcc 指定 stdcall 调用约定?

c++ - 我可以让 C++ 编译器在编译时实例化对象吗?