如何在GDB中调用C 函数

How to call a C++ function in GDB?

本文关键字:调用 函数 GDB      更新时间:2023-10-16

我需要在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

我发现的解决方法是将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"