2011-10-18 10 views
0

私のチームが(Mac)Vimで遭遇しているクラッシュを修正しようとしていますが、これは が再現できませんでした。コアをダンプしてしまいましたが、コアをgdbにロードすると、 ソースファイルが見つかりません。Vimをデバッグ(Mac)したときにgdbがソースを見つけられないのはなぜですか?

我々は-gでそれを構築する自作を通じてMacVimを構築している:

$ /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にソースをチェックアウト:

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

しかし、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

1日に数回は起こりますが、何が原因であるかははっきりしません。それはランダムな時に起こるようです。これは、それを再現する方法を考えることの一部です。 – 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に対してコアダンプを開きました。 Voilá! GDBのソースコード!

関連する問題