Почему GDB не может найти источники, когда мы отлаживаем (Mac) Vim? - PullRequest
0 голосов
/ 18 октября 2011

Я пытаюсь исправить ошибку, с которой сталкивается моя команда в (Mac) Vim, которая не была воспроизведена.У меня есть дамп ядер, но когда я загружаю ядро ​​в gdb, он не может найти исходные файлы.

Мы собираем MacVim через Homebrew, который строит его с -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 голосов
/ 22 октября 2011

@ Занятый русский написал в другой ответ :

В отличие от других UNIXen, в MacOS отладочная информация не связана с исполняемым файлом.Вместо этого исполняемый файл имеет список объектных файлов, которые были связаны с ним, и отладчик ищет информацию об отладке в этих отдельных объектных файлах.

Если вы удалите объектные файлы, то вы не сможете отлаживать.

Мы создали Vim из источника, который мы извлекли, затем открыли дамп ядра для этого Vim.Вуаля!Исходный код в GDB!

...