CoreDump 파일을 보려면 어떻게합니까?


13

충돌로 인한 버그를보고하면 버그가 비공개로되고 CoreDump.gz라는 파일이 만들어집니다. Bug Triage 설명서에는 다음이 나와 있습니다.

충돌에 여전히 CoreDump.gz 첨부 파일이 있으면 완전한 기호 스택 추적을 자동으로 가져 와서 중복을 확인할 수 없었습니다.

Stacktrace.txt는 사람이 읽을 수있는 것 같습니다. 스택 추적의 의미를 어떻게 이해할 수 있습니까? CoreDump.gz가 포함 된 CoreDump는 사람이 읽을 수없는 것 같습니다. "완전히 상징적 인 스택 추적"이란 무엇입니까? "완전히 기호화 된 스택 추적"의 차이점은 무엇입니까 CoreDump 파일의 내용을 보려면 어떻게합니까? ( '고양이'를 시도했지만 깨끗하지는 않습니다)

답변:


15

Coredump.gz는 충돌 한 프로그램이 액세스 할 수있는 (압축 된) 메모리입니다. 이진 파일입니다. Coredumps는 모든 종류의 개인 데이터를 채굴하는 보물 보관소입니다.

'gdb'를 실행하면 Coredump를 볼 수 있습니다.

gdb --core=mycoredump

물론이 코어와 관련된 디버그 패키지가 여전히 필요합니다.

그런 다음 다음을 수행하여 스택 추적을 생성 할 수 있습니다.

(gdb) bt

매개 변수 확인없이 현재 스레드의 스택 추적을 생성하거나

(gdb) thread apply all bt full

매개 변수 확인을 사용하여 코어 덤프의 모든 스레드에 대한 스택 추적을 생성합니다.

stacktrace 및 full stacktraces는 프로그램 내의 제어 흐름을 보여줍니다. Python의 경우 스택 추적의 맨 위에 가장 오래된 호출이 표시되고 가장 최신 호출이 맨 아래에 표시됩니다. 그 밖의 모든 것에는 맨 위가 가장 최근 통화이고 맨 아래는 가장 오래된 통화입니다.

전체 스택 추적은 흐름뿐만 아니라 매개 변수의 값도 보여줍니다. 예를 들어, "Password"라는 매개 변수와 "MySecretPassword"값을 가진 "validatePassword"라는 함수가 있다고 가정합니다.

스택 트레이스는 일반적으로 디버그 패키지가 설치된 경우에만 유용합니다 (따라서 스택 프레임을 쉽게 읽을 수있는 것으로 해석 할 수 있습니다). 스택 추적을 분석하려면이 특정 프로그램 인스턴스를 빌드하는 데 사용 된 소스가 있어야합니다.


CoreDump는 이진 파일이지만 어떻게 볼 수 있습니까? 스택 추적은 디버그 패키지가 설치된 경우에만 유용합니다. 그러면 왜 apport가 다른 방법으로보고합니까?
komputes

1
CoreDump 파일은 보려는 것이 아니라 gdb에서 디버깅하는 데 사용됩니다. 충돌을 생성하고 디버그 패키지가있는 동일한 버전의 소프트웨어 (및 모든 종속성)를 실행하는 머신이 있어야합니다. 그러면 Carlos가 위에 게시 한 것을 사용하여 스택 추적을 얻을 수 있습니다.
stgraber

2
이제 apport가 왜 여전히 apport와 관련이 있는지에 관해서는 apport에 코어 덤프를 잡고 DC의 상자에 디버그 패키지를 설치 한 다음 전체 스택을 버그 보고서에 첨부하는 많은 "리트 레이서"가 있기 때문입니다.
stgraber


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.