我试图通过gdb进入类中的方法。所以目前,我的gdb适用于独立功能。我可以很好地介入它们,然而,当我尝试进入某个方法时,它并没有进入它。这是我的剧本:
#include <iostream>
using namespace std;
class test{
public:
void say_hello(){
cout<< "hello";
}
};
int main(){
test t;
t.say_hello();
return 0;
}
这是我按下“运行”命令后gdb立即吐出的内容。
warning: `/BinaryCache/coreTLS/coreTLS-35.40.1~1/Objects/coretls.build/coretls.build/Objects-normal/x86_64/system_coretls_vers.o': can't open to read symbols: No such file or directory.
warning: Could not open OSO archive file "/BinaryCache/coreTLS/coreTLS-35.40.1~1/Symbols/BuiltProducts/libcoretls_ciphersuites.a"
warning: Could not open OSO archive file "/BinaryCache/coreTLS/coreTLS-35.40.1~1/Symbols/BuiltProducts/libcoretls_handshake.a"
warning: Could not open OSO archive file "/BinaryCache/coreTLS/coreTLS-35.40.1~1/Symbols/BuiltProducts/libcoretls_record.a"
warning: Could not open OSO archive file "/BinaryCache/coreTLS/coreTLS-35.40.1~1/Symbols/BuiltProducts/libcoretls_stream_parser.a"
以下是我尝试踩踏时会发生什么:
Breakpoint 1, main () at test.cpp:13
13 t.say_hello();
(gdb) s
14 return 0;
(gdb)
0x00007fff91eec5c9 in start () from /usr/lib/system/libdyld.dylib
(gdb)
Single stepping until exit from function start,
which has no line number information.
hello[Inferior 1 (process 9896) exited normally]
如果它有所不同,当我运行g ++ --version时,我得到Apple LLVM版本7.0.0。 感谢。
答案 0 :(得分:1)
默认情况下,GDB会跳过不包含调试信息的函数。但很明显你拥有它,因为你在main()上打破时会看到“at test.cpp:13”。
我的猜测是你有一个旧版本的GDB,它不能完全理解编译器生成的符号,因此无法进入成员函数。
如果我是你,我会首先尝试用lldb调试你的程序(因为你已经在你的系统上有它),看看它是否顺利。如果确实如此,那么问题确实在于旧的GDB,所以我会升级到更高版本。