2011-07-06 7 views
5

프로젝트 용 사용자 지정 코어 덤프 처리 응용 프로그램을 작성했습니다. 나는 '/ proc/sys/kernel/core_pattern'을 내 dump-handler를 호출하고 성공적으로 호출하도록 변경했다.코어 덤프 파일 형식

이제 코어 덤프를 gdb가 인식 할 수있는 파일에 저장하는 것이 문제입니다. 현재 내 덤프 처리기는 STDIN에서 덤프를 읽고이를 'core.dump'파일에 저장합니다. 나는이 핵심이 GDB에 덤프로드 할 때 그것은 나에게 오류를 제공합니다

(gdb) ... is not a core dump: File format not recognized

나는 다음과 같은 표준의 핵심에 '파일'명령을 실행 그것이 나에게주는 덤프 :

core: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from './dump_gen'

그리고 사용자 생성 된 덤프, '파일'에 대해 다음 제공합니다

core.dump: data

제발 아무도 당신이 어떻게 코어 덤프를 올바르게 작성하여 gdb에서 사용할 수 있도록 도와 줄 수 있습니까?

추신 : 표준 코어 덤프 파일을 사용하고 싶지 않습니다.

답변

4

에서 ELF 사양을 찾을 수 있습니다.

간단한 스크립트를 만들어 실행 파일로 만들고 핵심 패턴을 스크립트로 설정하십시오.

#!/bin/sh 
cat > /tmp/core.$$ 

이제 코어 파일을 (예를 들어 sleep 1243를 실행하고 ctrl+\을 눌러)를 생성하고 그것을 작동합니다.

난 그냥 내 시스템에서 직접 테스트하고 문제없이 작동합니다.

+0

빠른 응답을 주셔서 감사합니다. 귀하의 방법을 확인하고 그것을 작동, 그래서 내 C 코드를보고 버퍼에 데이터를 복사하는 버그를 발견했다. 그것은 효과가 있었다. – AvadhP

+1

나는 또한 동일한 문제에 직면하고 있지만 위의 단계에서 무엇을 할 것인지 궁금 할뿐입니다. gdb에 인수로 전달할 수있는 새로운 코어 덤프를 생성합니까? 감사! – sad

4

가장 먼저 확인해야 할 것은 파일의 종류를 나타내는 Elf 헤더 플래그입니다. 공유 객체, 링크되지 않은 객체, 실행 가능 및 코어 덤프의 네 가지 값이 있습니다. 이것이 gdb 오류의 원인 일 가능성이 큽니다.

또한 objdump를 사용하여 검사 해보십시오. 전체 ELF 파일을 분석하여 어떤 부분이 좋지 않은지 분석 할 수 있습니다.

당신은 당신이 어떻게 든 코어 파일에 대한 모든 데이터를 기록하지 않는 생각 http://refspecs.freestandards.org/elf/elf.pdf

관련 문제