2017-12-18 478 views
1

我正在尝试测试一个Vector类的实现,并试图使用GDB来查看错误发生的位置。堆栈跟踪中没有函数名称,GDB,但出现在LLDB中

当我用下面gcc -ggdb Vector.c TestVector.c编译,并随后在GDB运行它,我得到以下作为输出(崩溃和试图打印堆栈跟踪后):

| => gdb ./a.out 
Reading symbols from ./a.out...Reading symbols from /Users/prog/Desktop/Generics/a.out.dSYM/Contents/Resources/DWARF/a.out...done. 
done. 
(gdb) r 
Starting program: /Users/prog/Desktop/Generics/a.out 
[New Thread 0x2703 of process 56984] 
warning: unhandled dyld version (15) 

Thread 2 received signal SIGSEGV, Segmentation fault. 
0x00007fff65d97fe6 in ??() 
(gdb) bt 
#0 0x00007fff65d97fe6 in ??() 
#1 0x00007ffeefbff640 in ??() 
#2 0x00007fff65be4139 in ??() 
#3 0x00007ffeefbff660 in ??() 
#4 0x0000000000000000 in ??() 

enter image description here 没有特别有助于确定错误是由于回溯导致的,只显示函数执行的绝对内存位置。

当我在LLDB执行相同的任务,输出的是一个有点清晰: enter image description here

我的问题是,为什么GDB不给我准确的信息和LLDB做(尽管我不改变之间的编译设置两个调试会话),以及如何解决这个问题?

如果有任何帮助,我使用Mac OS X,High Sierra作为我的操作系统。

+0

这是已知的[Mac OS上的gdb错误](https://sourceware.org/bugzilla/show_bug.cgi?id=20981)。 – ks1322

回答

3

您正在使用的gdb无法识别由dyld加载到进程中的共享库。注意你的gdb输出的顶部,它说“未处理的dyld版本(15)”。它看起来像你使用的gdb需要更新才能在macOS上正常工作。我不知道现在如何主动维护gdb的macOS端口。