16.2. 코어 덤프 원인 확인 방법
프로그램이 비정상적으로 충돌한 후, 코어 덤프 원인을 어떻게 확인할 수 있나요?
유지 관리자: daohu527@gmail.com
버전: 1.0.0
날짜: 2024년 5월 19일
설명:
16.2.1. 답변
프로그램이 비정상적으로 충돌한 후, 코어 덤프 파일을 사용하여 구체적인 오류 원인을 확인할 수 있습니다.
16.2.1.1. 코어 덤프 파일 경로
Apollo의 코어 덤프 파일은 data/core 디렉토리에 저장됩니다. 프로그램이 충돌하면 시스템은 일반적으로 core 또는 `core.pid`라는 이름의 코어 덤프 파일을 생성하며, 여기서 `pid`는 프로세스 ID입니다.
16.2.1.2. 코어 덤프 원인 확인
gdb (GNU 디버거)는 코어 덤프 파일을 분석하는 데 강력한 도구입니다. 코어 덤프 파일을 생성한 실행 파일과 코어 덤프 파일 자체를 제공해야 합니다. 다음은 구체적인 단계입니다:
gdb를 시작하고 실행 파일과 코어 덤프 파일을 로드합니다:
gdb <path-to-executable> <path-to-core-dump>
예:
gdb ./my_program data/core/core.12345
gdb에서 충돌 시의 스택 정보를 확인합니다:
(gdb) bt
bt(백트레이스) 명령은 충돌 시의 호출 스택을 표시하여 문제를 찾는 데 도움을 줍니다.
16.2.1.3. 예시
생성된 코어 덤프 파일이 ``core.12345``라고 가정하면, 다음 단계로 확인할 수 있습니다:
$ gdb mainboard data/core/core.12345
gdb 프롬프트에서:
(gdb) bt
# 호출 스택이 표시됩니다
(gdb) info locals
# 현재 프레임의 지역 변수를 표시합니다
(gdb) print some_variable
# 변수 some_variable의 값을 출력합니다
(gdb) list
# 현재 실행 중인 코드 라인을 표시합니다
(gdb) list my_program.c:42
# my_program.c 파일의 42번째 라인의 코드를 확인합니다
위의 단계를 통해 프로그램 충돌의 원인을 심층 분석하고, 적절한 디버깅 및 수정을 진행할 수 있습니다.