为什么我们在调试(Mac)Vim时gdb无法找到源代码?

时间:2011-10-18 15:11:17

标签: vim gdb macvim coredump

我正在尝试解决我的团队在(Mac)Vim遇到的崩溃问题,但事实并非如此 是可重复的。我有它倾销核心,但当我加载核心到gdb, 它无法找到源文件。

我们正在通过Homebrew构建MacVim,它使用-g构建它:

$ /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本身的来源?我们需要以不同的方式编译吗?

1 个答案:

答案 0 :(得分:0)

@Employed Russian在another answer写道:

  

与其他UNIXen不同,在MacOS上调试信息没有链接到   可执行文件。相反,可执行文件具有一个目标文件列表   链接到它,调试器在这些中寻找调试信息   单个目标文件。

     

如果删除目标文件,则无法进行调试。

我们从我们签出的源代码构建了Vim,然后针对该Vim打开了核心转储。瞧! GDB中的源代码!