2011-10-18 2 views
0

내 팀이 (Mac) Vim에서 발생하는 오류를 수정하려고하고 있는데, 은 재생성되지 않았습니다. 나는 코어를 버려야하지만, 코어를 gdb에로드 할 때, 소스 파일을 찾을 수 없다.Vim을 디버깅 할 때 gdb가 소스를 찾지 못하는 이유는 무엇입니까?

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로드에 소스를 체크 아웃 : 우리는 -g 함께 구축 브루 통해 MacVim을 구축하고

그러나 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는 달리, 맥 OS에 디버그 정보는 실행 파일로 연결되지 않습니다. 대신, 실행 파일에는 에 연결된 객체 파일 목록이 있으며 디버거는이 개별 객체 파일에서 디버그 정보를 찾습니다.

개체 파일을 제거하면 디버그 할 수 없습니다.

우리는 체크 아웃 한 소스에서 Vim을 빌드 한 다음 해당 Vim에 대해 코어 덤프를 열었다. Voilá! GDB의 소스 코드!