如何在GDB中调用C ++函数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在GDB中调用C ++函数?相关的知识,希望对你有一定的参考价值。

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

以上是关于如何在GDB中调用C ++函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MicroPython 中从 C 调用 python 函数

如何在 C 中跟踪函数调用?

linux 下的动态库制作 以及在python 中如何调用 c 函数库

C语言学习_C如何在一个文件里调用另一个源文件中的函数

每1分钟后如何在c ++中执行特定代码

如何在C中调用简化分数的函数?