无法进入类方法gdb

时间:2015-10-15 21:55:37

标签: c++ gdb

我试图通过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。 感谢。

1 个答案:

答案 0 :(得分:1)

默认情况下,GDB会跳过不包含调试信息的函数。但很明显你拥有它,因为你在main()上打破时会看到“at test.cpp:13”。

我的猜测是你有一个旧版本的GDB,它不能完全理解编译器生成的符号,因此无法进入成员函数。

如果我是你,我会首先尝试用lldb调试你的程序(因为你已经在你的系统上有它),看看它是否顺利。如果确实如此,那么问题确实在于旧的GDB,所以我会升级到更高版本。