[컴파일]
디버깅 모드로 컴파일 하면 나중에 에러 발생 시 나온 이미지 파일로 에러가 난 위치를 찾을 수 있다는 장점이 있다.
gcc 기준으로 컴파일 옵션에서 -O2 대신 -g -O0 옵션으로 대체한다.
-g는 함수, 해당 코드가 소스상 어느라인인지를 알려주는 라인정보등을 추가한다는 뜻이고,
-O0는 최적화 정도를 말하는데 0이므로 최적화를 하지 않는다는 뜻이다.
최적화를 실행 할 경우, 지역변수 생성을 동적으로 하고, 일부 코드의 경우 자동으로 최적화된 코드로 대체하기 때문에 에러가 발생한 위치를 소스와 매칭시킬수 없다.
[실행 전]
ulimit -c 명령을 이용하여 에러가 발생했을때 core 파일이 생성 될 수 있도록 한다.
core 파일은 말 그대로 해당 프로세스의 CPU상태 (레지스터 등), 메모리 상태를 덤프하는 것을 뜻한다.
하드디스크나 NFS등으로 실행하여 저장 용량이 넉넉 할 경우 ulimit -c unlimit 로 하여도 되지만
RAM DISK 등이나 NAND 플래시와 같이 여유 저장공간이 적은곳에서 실행파일을 실행 할 경우
용량에 맞춰서 수치를 적어준다. ex) ulimit - c 1024
[실행 후]
에러가 발생하였을 경우 실행파일 있는 자리에 .core 라는 파일이 생긴다.
당연한 말이지만 저장 불가능한 cd 나 dvd 와 같은 곳애서 실행한다면 생기지 않을 것이다.
.core 파일이 생성되었으면 그 자리나 source 파일 있는 곳에다가 복사해 놓고 gdb로 불러 들인다.
gdb역시 해당 CPU(타겟 CPU)에 맞는것을 써야한다.
실행방법은
gdb 실행파일명 .core
이다.
어디서 멈춰섰는지를 찾고 싶으면 화면에서 where 를 치면 된다.
댓글 없음:
댓글 쓰기