我正在使用 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/