ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Debug, addr2line
    2011. 1. 20. comments

    addr2line 은 프로그램의 심벌 주소값들을 파일 이름과 라인 번호로 변환한다.

    테스트 코드 : test.c


    #include 
    void callback_func(){
    printf("callback func\n");
    }
    
    
    int main()
    {
        printf("Hello World\n");
        callback_func();
        return 0;
    }
    

    make symbol

    ~ $ gcc -Wl,-Map=test.map -g -o test test.c
    ~ $ grep callback test.map
    
                    0x0000000000400508                callback_func
    

    라인 확인

    ~ $ addr2line -i 0x0000000000400508  -e test
    ~/test.c:4
    



    프로그램이 실행 중, 런타임 오류가 발생한 경우 symbol 값을 시스템에서 stdout으로 출력되며,
    그 내용을 기반으로 addr2line 명령어로 어느 코드의 라인에서 발생했는지 찾을 수 있다.


    그 전에 몇가지 조건이 필요하다.

    1.  컴파일 옵션에  -g 옵션 주고 컴파일
    2.  컴파일 옵션에서 최적화 옵션이 포함시키지 않는다.(최적화 옵션으로 인해 Symbol 위치를 정확히 찾을 수 없음)
     


    반응형

    댓글

Designed by Tistory.