简体   繁体   English

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

[英]How to call a C++ function in GDB?

I need to call a function with a following signature in GDB: 我需要在GDB中调用具有以下签名的函数:

std::string demangle(const char* name);

How can I call it in GDB? 如何在GDB中称呼它?

Here is what I'm trying: 这是我正在尝试的:

(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.

I'm trying with G++ 7.0, GDB 8.0 我正在尝试使用G ++ 7.0,GDB 8.0

The workaround I've found is to wrap C++ function (with std::string) into a C function: 我发现的解决方法是将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();
}

This works as expected: 这按预期工作:

(gdb) p cdemangle("d") 
$1 = 0x7ffff7dd6070 <tmp_demangle_str+16> "double"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM