我不能用一个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命令就可以得到行号?
1条答案
按热度按时间vh0rcniy1#
要使GDB将
A::print()
识别为单个符号,请将其括在单引号中