c++ - 转换 Classname::FunctionName( Para1, Para2 ) 中的符号

标签 c++ gcc name-mangling

我正在使用 GNU 扩展“char** backtrace_symbols(void *buffer, int size)”在抛出异常时获取堆栈跟踪。是否有将符号转换为“人类可读”字符串的库函数 - 重做名称修改?

如果没有,我就按照这个写自己的函数Wiki article .

具体的:

Input:  test.exe(_ZN10CTLTestApp12ExecuteGroupEPK19CTLTestCaseRegisterNS_11EReportTypeE+0x24c) 
Output: test.exe CTLTestApp::ExecuteGroup( CTLTestCaseRegister, EReportType )

非常感谢,

查理

最佳答案

#include <cxxabi.h> 
#include <iostream>
#include <cstdlib>

int main() {
  int status;
  const std::string name = "_ZN10CTLTestApp12ExecuteGroupEPK19CTLTestCaseRegisterNS_11EReportTypeE";
  char *realname = abi::__cxa_demangle(name.c_str(), 0, 0, &status);
  std::cout << realname << "(" << status << ")" << std::endl;
  free(realname);
}

运行给出:

CTLTestApp::ExecuteGroup(CTLTestCaseRegister const*, CTLTestApp::EReportType)(0)

在线查看documentation有关更完整的示例和更多详细信息。

关于c++ - 转换 Classname::FunctionName( Para1, Para2 ) 中的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4077559/

相关文章:

c - gcc 的所有这些功能是什么? (-l -a -等)

gcc - 如何让 gcc 警告将错误的枚举传递给函数

c++ - 隐式使用析构函数

c++ - 将我的二分搜索程序改进为递归程序?

c++ - 如何有效地计算顶部排列

Python:动态类生成:覆盖成员

c++ - GCC 链接/符号名称与 C++ 和汇编程序文件的修改

c++ - Webots中的无人机模拟

c - 需要帮助使用 gcc 编译 c 程序

Python 名称用 __ 修饰全局变量