다양한 Linux 배포판에서 코어 파일 디버깅
개발 환경과 다른 Linux 배포판에서 코어 파일이 생성되면 스택 추적 전혀 의미가 없을 수도 있습니다. 동적으로 링크된 실행 파일은 공유 라이브러리 내의 주소에 의존하며 이러한 주소는 배포판마다 다를 수 있습니다. GDB는 크래시를 라이브러리 복사본의 함수에 잘못 기인할 수 있지만 고객의 시스템은 동일한 주소에 다른 함수를 가질 수 있습니다.
스택 추적의 정확성을 검증하기 위해 문제의 함수를 디스어셈블할 수 있습니다. 주소가 명령어 내에 속하거나 CALL이 아닌 명령어가 앞에 오는지 확인합니다. 이러한 경우 스택 추적은 신뢰할 수 없습니다.
더 정확한 추적을 얻으려면 문제가 있는 바이너리에서 사용되는 다음 라이브러리를 제공하도록 고객에게 요청할 수 있습니다.
cd / tar cvzf to-you.tar.gz lib/libc.so.6 lib/ld-linux.so.2 ...
시스템:
mkdir /tmp/from-customer tar xzf to-you.tar.gz -C /tmp/from-customer gdb /path/to/binary (gdb) set solib-absolute-prefix /tmp/from-customer (gdb) core core # Important: Set solib-... before loading core (gdb) where # Get meaningful stack trace!
최적화로 디버깅 바이너리
고객에게 -g 바이너리를 실행하라고 조언하는 대신, 선호되는 접근 방식은 -g 및 -O2 최적화 플래그를 모두 사용하여 바이너리를 빌드하고 배포하기 전에 디버그 정보를 제거하는 것입니다.
build with -g -O2 -o myexe.dbg strip -g myexe.dbg -o myexe distribute myexe to customers when a customer gets a core, use myexe.dbg to debug it
이를 통해 민감한 소스 코드 세부정보를 공유하지 않고도 완전한 기호 디버깅(파일/라인, 로컬 변수)이 가능합니다.
위 내용은 다양한 Linux 배포판에서 생성된 핵심 파일을 정확하게 디버깅하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!