2014-12-15 3 views
0

this과 같은 게시물에서 디버그 버전 앱에서 생성 된 코어 덤프 파일을 분석하는 방법을 알고 있습니다. 코어 덤프 파일의 경우 gdb 도구와 bt 명령을 사용하여 호출 스택을 얻을 수도 있습니다.코어 덤프 분석 (릴리즈 버전 앱)

그러나 info locals, list, print localvariable 등과 같은 다른 명령을 사용할 때 나는 아무것도 표시하지 않는다는 것을 알았습니다! 놀랍게도이 코어 덤프 파일은 디버그 버전 앱에서 생성 된 것만큼 크며 1.6G 바이트 크기입니다!

호출 스택을 포함하여 더 많은 정보를 얻을 수 있습니까? 코어 덤프가 생성 될 때 마지막 함수 호출에서 변수와 관련된 다른 세부 사항을 볼 수 있습니까?

답변

1

이 코어 덤프 파일은 디버그 버전 응용 프로그램에서 생성 된 것보다 크기가 크고 1.6G 바이트 크기입니다.

놀랄 필요가 없습니다. 코어 덤프에는 응용 프로그램 메모리의 수정 가능한 세그먼트가 들어 있습니다. 디버그 정보로 컴파일 된 응용 프로그램은 디버그 정보없이 컴파일 된 응용 프로그램과 완전히 동일한 수정 가능한 메모리를 가지며 정확히 동일한 코어 덤프를 생성해야합니다 (다른 컴파일 플래그가 동일하고 응용 프로그램이 반복적으로 실행될 수 있다고 가정).

디버거에서 메모리 덤프를 이해하려면 디버그 정보가 필요합니다. 하지만 디버그 정보 없이도 메모리 덤프를 이해할 수 있습니다. 훨씬 더 수동적이고 지루합니다.

어쨌든 호출 스택을 포함하여 더 많은 정보를 얻을 수 있습니까?

이미에 전화 스택이 있습니다.

가장 좋은 방법은 입니다. 항상 전체 디버그 정보로 애플리케이션을 빌드하십시오.

gcc -O2 -g -c foo.cc -o foo.o 
gcc -g foo.o bar.o ... -o app 

그런 다음 최종 사용자에게 디버깅을 위해 결과 (대형) 바이너리를 유지하지만 이진의 제거 변형을 제공 :

cp app app-stripped 
strip -g app-stripped # removes all debug info from app-stripped 

를 이제 앱 제거에서 코어 덤프를 얻을 때, 해당 코어를 분석하려면 전체 디버그 app을 사용하십시오.

또는 here과 같이 별도의 debuginfo 파일을 사용할 수 있습니다.