我需要在GDB中调用具有以下签名的函数:
std::string demangle(const char* name);
如何在GDB中调用它?
以下是我正在尝试的内容:
(gdb) info function demangle*
std::__cxx11::string demangle[abi:cxx11](char const*);
(gdb) call demangle[abi:cxx11]("d")
A syntax error in expression, near `:cxx11]("d")'.
(gdb) call demangle("d")
No symbol "demangle" in current context.
我正在尝试使用G ++ 7.0,GDB 8.0
答案 0 :(得分:0)
我找到的解决方法是将C ++函数(带有std :: string)包装到C函数中:
static std::string tmp_demangle_str;
const char * cdemangle(const char* name) {
tmp_demangle_str = demangle(name);
return tmp_demangle_str.c_str();
}
这可以按预期工作:
(gdb) p cdemangle("d")
$1 = 0x7ffff7dd6070 <tmp_demangle_str+16> "double"