0

I'm trying to fix a crash my team is encountering in (Mac)Vim, which hasn't been reproducible. I've got it dumping cores, but when I load a core into gdb, it can't find the source files.

We're building MacVim through Homebrew, which builds it with -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

Then we check out the source to the same revision and run gdb, loading in the core:

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

But then, gdb is only aware of the sources used to build Command-T, a plugin loaded when MacVim crashed:

(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

Why does gdb not try to find the sources for Vim itself? Do we need to compile it differently?

Peeja
  • 13,683
  • 11
  • 58
  • 77
  • If the bug isn't reproducible, why bother fixing it? The first step in debugging is to reproduce the bug… – sidyll Oct 18 '11 at 15:22
  • It happens a few times a day, but it's not clear what causes it. It seems to happen at random times. So this is part of figuring out how to reproduce it. – Peeja Oct 18 '11 at 15:25
  • 1
    Maybe http://stackoverflow.com/questions/3353722/how-do-i-debug-c0x-programs-in-macports-gcc-4-5/4164548#4164548 can apply here as well? – abigagli Oct 18 '11 at 20:35
  • @abigagli Ooh, that looks promising. Since we installed from Homebrew, the object files are gone. I'll investigate. Thanks! – Peeja Oct 18 '11 at 22:01

1 Answers1

0

@Employed Russian wrote in another answer:

Unlike other UNIXen, on MacOS the debug info is not linked into the executable. Instead, the executable has a list of object files which were linked into it, and the debugger looks for debug info in these individual object files.

If you remove the object files, then you can't debug.

We built Vim from the source we checked out, then opened the core dump against that Vim. Voilá! Source code in GDB!

Community
  • 1
  • 1
Peeja
  • 13,683
  • 11
  • 58
  • 77