16.2. 코어 덤프 원인 확인 방법

프로그램이 비정상적으로 충돌한 후, 코어 덤프 원인을 어떻게 확인할 수 있나요?

16.2.1. 답변

프로그램이 비정상적으로 충돌한 후, 코어 덤프 파일을 사용하여 구체적인 오류 원인을 확인할 수 있습니다.

16.2.1.1. 코어 덤프 파일 경로

Apollo의 코어 덤프 파일은 data/core 디렉토리에 저장됩니다. 프로그램이 충돌하면 시스템은 일반적으로 core 또는 `core.pid`라는 이름의 코어 덤프 파일을 생성하며, 여기서 `pid`는 프로세스 ID입니다.

16.2.1.2. 코어 덤프 원인 확인

gdb (GNU 디버거)는 코어 덤프 파일을 분석하는 데 강력한 도구입니다. 코어 덤프 파일을 생성한 실행 파일과 코어 덤프 파일 자체를 제공해야 합니다. 다음은 구체적인 단계입니다:

  1. gdb를 시작하고 실행 파일과 코어 덤프 파일을 로드합니다:

    gdb <path-to-executable> <path-to-core-dump>
    

    예:

    gdb ./my_program data/core/core.12345
    
  2. 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번째 라인의 코드를 확인합니다

위의 단계를 통해 프로그램 충돌의 원인을 심층 분석하고, 적절한 디버깅 및 수정을 진행할 수 있습니다.