当引发异常时,我正在使用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/

10-11 18:12