Skip to content

Debugging

디버그(영어: debug), 디버깅 (debugging) 혹은 수정은 컴퓨터 프로그램의 정확성이나 논리적인 오류(버그)를 찾아내는 테스트 과정을 뜻한다. 디버깅(debugging), 수정이라고도 한다. 일반적으로 디버깅을 하는 방법으로 테스트 상의 체크, 기계를 사용하는 테스트, 실제 데이터를 사용해 테스트하는 법이 있다.

Binary Tools

바이너리 디버깅을 위한 도구 집합:

  • strings
  • file
  • objdump
  • strace - 시스템 명령을 감시
  • ltrace - 라이브러리 호출 감시
  • gdb
  • sysdig
  • ldd
  • size
  • readelf
  • nm
  • pmap - 으로 메모리 할당 내역 보기

GUI Disassembler

Tip/Trick

Python gdb debugging

Gdb#Python gdb debugging 항목 참조.

Crash 위치 파악하기

크래시가 발생된 위치의 주소를 파악한 후 addr2line를 사용하여 해당 위치를 파악한다.

Example:

$ addr2line -fe a.out 0x8048767

Segfault debugging

Configure GCC with --enable-checking. Compile it with -g -O0 so that you can use gdb.

Compile your test case with -v -da -Q.

  • -Q: will show which function in the test case is causing it to crash.
  • -v: shows how cc1 was invoked (useful for invoking cc1 manually in gdb).
  • -da: dumps the RTL to a file after each stage.

Next, use gdb to get a stack trace:

bash$ gdb cc1
gdb> run arguments
(cc1 will stop at the segmentation fault)
gdb> where
gdb> list

Print out the values of interesting variables, e.g., the ones in the statement which got the segmentation fault. You can use the pt and pr macros from the gdbinit.in file to display GCC data. For example, if there is a value of type tree named t, and a value of type rtx named r, you can use these commands:

gdb> source .gdbinit
gdb> print t
gdb> pt
gdb> print r
gdb> pr
gdb> pt

See also

Favorite site

Tip & Guide

MSVC

Guide

References


  1. Reverse_engineering_-_Understanding_what_a_Linux_binary_is_doing.pdf 

  2. Jh4hj.tistory.com_-stack_trace-_backtrace_implementation.pdf 

  3. Jh4hj.tistory.com_-_program_dynamic_trace_tools.pdf 

  4. Jh4hj.tistory.com_-_friend_of_memory_debuggin.pdf