c++ gdb使用一个命令获取解复用函数名的行号

uqdfh47h  于 2023-02-26  发布在  其他
关注(0)|答案(1)|浏览(136)

我不能用一个gdb命令从gdb中得到一个c++ demangled函数名的源代码行。但是对于一个mangled函数名,它可以工作。
一个示例c++应用程序:

#include <string>
#include <iostream>

struct A
{
    virtual void print()
    {
        std::cout << "hello\n";
    }
};

int main(int argc, char** argv)
{
    A a;
    a.print("hello");
}

build g++ test.cpp -g -o test.bin获取gdb中一个被破坏的名字的行号(一个命令):

gdb test.bin
>info line *(_ZN1A5printEv+20)
Line 8 of "test.cpp" starts at address 0x1274 <A::print()+16> and ends at 0x1287 <A::print()+35>.

但是当我试图获得具有解Map名称的行号时:

>info line *(A::print()+20)
Cannot resolve method A::print to any overloaded instance

它只在2个步骤中起作用:

> info line A::print()
Line 6 of "test.cpp" starts at address 0x1264 <A::print()> and ends at 0x1274 <A::print()+16>.
>info line *(0x1264+20)
Line 8 of "test.cpp" starts at address 0x1274 <A::print()+16> and ends at 0x1287 <A::print()+35>.

有没有办法用一个gdb命令就可以得到行号?

vh0rcniy

vh0rcniy1#

要使GDB将A::print()识别为单个符号,请将其括在单引号中

info line *('A::print()'+20)

相关问题