2011-10-18 63 views
0

我試圖修復我的團隊在(Mac)Vim中遇到的崩潰,它沒有 被重現。我已經得到了轉儲內核,但是當我將一個內核加載到gdb時,它找不到源文件。爲什麼gdb在調試(Mac)Vim時無法找到源代碼?

我們通過自制,這與-g建立它建立的MacVim:

macvim$ gdb /usr/local/Cellar/macvim/7.3-62/MacVim.app/Contents/MacOS/Vim /cores/core.18234 -d src 

$ /usr/local/Cellar/macvim/7.3-62/MacVim.app/Contents/MacOS/Vim --version 
[...] 
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_MACVIM -Wall -Wno-unknown-pragmas -pipe -DMACOS_X_UNIX -no-cpp-precomp -g -O2 -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.6 -arch x86_64 -D_FORTIFY_SOURCE=1  -I/System/Library/Frameworks/Tcl.framework/Headers -D_REENTRANT=1 -D_THREAD_SAFE=1 -D_DARWIN_C_SOURCE=1 
Linking: gcc -L. -L.  -Wl,-syslibroot,/Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.6 -arch x86_64 -L/usr/local/lib -o Vim -framework Cocoa -framework Carbon  -lncurses -liconv -framework Cocoa -L/usr/local/lib -L/System/Library/Perl/5.10.0/darwin-thread-multi-2level/CORE -lperl -lm -lutil -lc -framework Python -F/System/Library/Frameworks -framework Tcl -framework CoreFoundation -framework Ruby 

然後我們在覈心退房源的同一修訂和運行GDB,裝載

但是,gdb只知道用於構建Command-T的源代碼,這是MacVim崩潰時加載的插件:

(gdb) info sources 
Source files for which symbols have been read in: 



Source files for which symbols will be read in on demand: 

/Users/pivotal/.vim/bundle/command-t/ruby/command-t/matcher.c, /Users/pivotal/.vim/bundle/command-t/ruby/command-t/match.c, /Users/pivotal/.vim/bundle/command-t/ruby/command-t/ext.c 

gdb爲什麼不試圖找到Vim本身的源代碼?我們需要以不同的方式進行編譯嗎?

+0

如果該錯誤不可重現,爲什麼還要修復它?調試的第一步是重現錯誤... – sidyll

+0

它每天發生幾次,但不清楚是什麼原因造成的。它似乎隨機發生。所以這是搞清楚如何重現它的一部分。 – Peeja

+1

也許http://stackoverflow.com/questions/3353722/how-do-i-debug-c0x-programs-in-macports-gcc-4-5/4164548#4164548也可以在這裏適用? – abigagli

回答

0

@Employed俄語寫在another answer

不像其他UNIXen,在MacOS調試信息不​​鏈接到 可執行文件。相反,可執行文件有一個目標文件列表,其中鏈接到目標文件,調試器在這些目標文件中查找調試信息。

如果您刪除了對象文件,那麼您無法進行調試。

我們從源碼中構建了Vim,然後打開了針對該Vim的核心轉儲。瞧! GDB的源代碼!

相關問題