2011-08-09 4 views
2

Linux 64 비트 시스템에서 실행중인 릴리스 버전 서버 프로세스가 있습니다. 추락해서 코어 덤프 파일을 남겼습니다.gdb backtrace에서 정보를 얻을 수 없습니다.

GDB SVR의 코어 덤프 파일

그리고있어 다음 역 추적 :

는 주소 정보를 주면 addr2line에 의해 분석 될 수없는
(gdb) where 
#0 0x0000000000432691 in ??() 
#1 0x00002b07655a50cc in ??() 
#2 0x00002b07655a50c4 in ??() 
#3 0x00007fff9fade920 in ??() 
#4 0x0000000000439db3 in ??() 
#5 0x00007fff9fade910 in ??() 
#6 0x00007fff9fade910 in ??() 
#7 0x00007fff9fade8e0 in ??() 
#8 0x00000000004663e2 in ??() 
#9 0x00007fff9fade910 in ??() 
#10 0x00007fff9fade910 in ??() 
#11 0x00007fff9fade930 in ??() 
#12 0x0000000000605108 in ??() 
#13 0x00002b07655a274c in ??() 
#14 0x0000000000ebc678 in ??() 
#15 0x169f49f100000001 in ??() 
#16 0x00000000021dc6c0 in ??() 
#17 0x00002b07655a284c in ??() 
#18 0x00002b07655a27dc in ??() 
#19 0x00007fff9fade960 in ??() 
#20 0x000000000043a03b in ??() 
#21 0x00007fff9fade960 in ??() 
#22 0x0000000000994d02 in ??() 
#23 0x00000000000ecd57 in ??() 
#24 0x00002b07655a274c in ??() 
#25 0x00002b07655a274c in ??() 
#26 0x00002b07655a27dc in ??() 
#27 0x00007fff9fade980 in ??() 
#28 0x000000000060a5eb in ??() 
#29 0x000000009fadeb50 in ??() 
#30 0x00002b07655a274c in ??() 
#31 0x00007fff9fade9d0 in ??() 
#32 0x000000000060a8f0 in ??() 
#33 0x00007fff9fadeb50 in ??() 
#34 0x00007fff9fadea10 in ??() 
#35 0x00002b07655a274c in ??() 
#36 0x00007fff9fadea10 in ??() 
#37 0x000000009fade9d0 in ??() 
#38 0x00007fff9fadeb58 in ??() 
#39 0x0000000000000000 in ??() 

, 문제가 무엇이며 어떻게이처럼 디버깅 할 GDB를 사용 나는 코어 덤프의 근본 원인을 찾을 수 있습니까?

감사합니다.

+0

프로그램이 -g 플래그로 컴파일되어 있습니까? 실행 파일을 제거하지 않았는지 확인하십시오. – Kamath

답변

1

디버그 기호가없는 프로그램을 디버그하는 것은 매우 어렵습니다. 응용 프로그램의 릴리스 버전을 사용하면 코어 덤프에 디버그 정보가 포함되지 않습니다.

잘 모르겠지만 스택 추적을 응용 프로그램의 ".map"파일과 연관 지을 수 있다면 어딘가에있을 수 있습니다. 귀하의 입장에 있다면 디버그 기호 (-g 컴파일러 플래그)로 앱을 다시 컴파일 한 다음 디버깅을 진행할 것입니다.

2

코어 덤프가 생성 된 시스템에서 GDB를 실행하고 있습니까?

GDB가 크래시 스택 추적을 올바르게 재구성하려면 크래시 (또는 가비지 가져 오기) 당시 사용 된 바이너리에 대한 액세스 권한이 이어야합니다.

이 작업을 수행하는 가장 쉬운 방법은 생성 된 시스템의 코어를 분석하는 것입니다. 가능하지 않은 경우 모든 공유 라이브러리를 예를 들어로 복사해야합니다. /tmp/solib-on-server/ (경로를 유지합니다 (예 : /lib/libc.so.6/tmp/solib-on-server/lib/libc.so.6) GDB set solib-absolute-prefix /tmp/solib-on-server 명령어 을 사용하여 코어를로드합니다. 예 :

gdb -ex 'set solib-absolute-prefix /tmp/solib-on-server' \ 
    -ex 'core /path/to/core' /path/to/executable 
관련 문제