c++ - 使用 GCC 插件打印调用的函数名称

标签 c++ gcc g++ gcc-plugins gimple

我需要使用gcc插件打印程序调用函数的名称 为此,我创建了一个将在 ssa pass 之后调用的 pass,我已经启动了该插件,并且可以使用 gimple_stmt_iterator 循环其语句:

int read_calls(){
  unsigned i;
  const_tree str, op;
  basic_block bb;
  gimple stmt;
  tree fnt;
  FOR_EACH_BB_FN(bb, cfun) {
    gimple_stmt_iterator gsi;
    for (gsi=gsi_start_bb(bb); !gsi_end_p(gsi); gsi_next(&gsi))
    {
        stmt = gsi_stmt(gsi);
        if (is_gimple_call(stmt)){
          const char* name = THE_FUNCTION_I_NEED(stmt);
          cerr << " Function : " << name << " is called \n";
        }
    }
  }
  return 0;
}

如何使用 gimple 节点打印被调用函数的名称? 我还可以打印其他信息,例如调用它的行号、调用它的函数的名称等..?

最佳答案

我已经寻找答案几个小时了,答案实际上很简单: get_name(tree node)...我一直在尝试很多函数,因为文档真的很差...我在这里找到了它: GCC Middle and Back End API Reference

如您所见,没有关于函数功能的注释,并且它退出了我找到的有关 gcc 的最佳文档,无论如何 get_name(..) 工作正常,但我还没有'还没找到如何打印源代码行

关于c++ - 使用 GCC 插件打印调用的函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29346772/

相关文章:

c++ - 如何将 qml 的 console.log() 重定向到 cpp stdout

gcc - gdb:打印 AArch64 高级 SIMD 矢量寄存器(有可能吗?)

gcc - 如何使用 pip 安装特定版本的包

c - 如何在不显式链接数学库的情况下使用带有 gcc 的 c 中的数学函数

c++ - Makefile 重复符号

使用 -D 选项时 gcc 编译器错误

c++ - std::queue front 会将前面的元素移出行外吗?

c++ - 在不改变值(value)、性能的情况下多次访问位域?

c++ - libjpeg 中的指针对齐

c++ - 优化构造函数调用次数