2017-12-18 210 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端口。