> 백엔드 개발 > C++ > 다양한 Linux 배포판에서 생성된 핵심 파일을 정확하게 디버깅하려면 어떻게 해야 합니까?

다양한 Linux 배포판에서 생성된 핵심 파일을 정확하게 디버깅하려면 어떻게 해야 합니까?

DDD
풀어 주다: 2024-12-17 06:35:25
원래의
242명이 탐색했습니다.

How Can I Accurately Debug Core Files Generated on Different Linux Distributions?

다양한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿