1 / 22

디버깅 환경 및 방법

디버깅 환경 및 방법. Lecture #14. 강의 순서. Logic Analyzer, Background Debug Mode JTAG (Joint Test Action Group), Debug Monitor ROM Emulator, ICE (In-Circuit Emulator) GNU Debugger (Gdb). Logic Analyzer. 하드웨어 디버깅 도구로 시스템에 영향을 주지 않고 실시간 분석 가능

gazit
Download Presentation

디버깅 환경 및 방법

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 디버깅 환경 및 방법 Lecture #14

  2. 강의 순서 • Logic Analyzer, Background Debug Mode • JTAG (Joint Test Action Group), Debug Monitor • ROM Emulator, ICE (In-Circuit Emulator) • GNU Debugger (Gdb)

  3. Logic Analyzer • 하드웨어 디버깅 도구로 시스템에 영향을 주지 않고 실시간 분석 가능 • 하드웨어 회로의 수십 혹은 수백 지점으로부터 읽은 신호(0 혹은 1)를 분석하여 화면에 display함 • logic analyzer의 주요 기능 • timing 모드: 각 지점의 timing 관계를 알 수 있음 • state 모드: 시스템의 상태를 알아낼 수 있음 (disassembler 사용) • logic analyzer의 한계 • target 시스템과의 연결 시에 물리적인 한계가 있음 • 프로세서 register 및 memory 내용을 직접 읽을 수 없음 • 프로세서가 cache를 사용하면 버스에 변화가 나타나지 않으므로 분석이 힘듦

  4. Logic Analyzer - 그림 timing 모드 state 모드 logic analyzer

  5. Background Debug Mode • 최근의 프로세서들은 프로세서 내에 디버깅을 용이하게 하기 위한 추가적인 회로와 디버깅 단자를 가지고 있음 • 이 디버깅 단자를 통하여 host 시스템과 target 시스템이 통신하면서 프로그램을 디버깅함 • Background Debug Mode의 기능 • register 및 memory 내용을 읽거나 변경함 • breakpoint를 설정하고 step 수행을 지원

  6. JTAG (Joint Test Action Group) • target 보드에 장착된 칩의 핀(cell)들을 host에서 연결된 4~5개의 선을 통하여 직렬 방식(shift-register)으로 연결하여 테스트하는 방법 • JTAG 표준은 IEEE에 의하여 채택되었음 - IEEE 1149 Standard Test Access Port and Boundary-Scan Architecture • 프로세서(CPU)의 상태와 상관없이 target 보드에 장착된 모든 칩의 외부 핀을 구동시키거나 값을 읽을 수 있는 기능을 제공 • 소프트웨어 개발자는 flash memory를 fusing할 때도 JTAG을 사용

  7. JTAG cell의 연결 • 각 JTAG cell은 해당 칩의 한 단자와 대응됨 • JTAG cell의 연결은 긴 shift-register를 형성함 칩 cell JTAG connector 입력 출력 target 보드

  8. Debug Monitor • target 시스템의 ROM에 상주하는 디버깅 소프트웨어 • host 시스템의 debugger는 serial 혹은 Ethernet 포트를 통하여 target 시스템의 debug monitor와 통신한다 • debug monitor가 host에 제공하는 디버깅 기능 • target의 memory 및 register 값 변경 • program의 수행 • breakpoint의 설정

  9. ROM Emulator • target 시스템의 ROM 소켓을 host의 serial, Ethernet 혹은 USB 포트에 연결하여 host에서 target 시스템의 ROM을 대치하는 memory를 제공 - target 시스템의 통신 포트를 사용 않음 • ROM emulator가 제공하는 디버깅 기능 • memory 및 register의 값을 변경 • breakpoint 설정 • single step 수행

  10. In-Circuit Emulator (ICE) • target 보드의 프로세서 및 memory 등을 대체하여 실험할 수 있는 디버깅 도구 - ICE에 내장된 프로세서와 memory 사용 • target 시스템 프로세서 및 memory에 문제가 있을 때에도 시스템을 실행시켜 개발하면서 디버깅할 수 있음 • memory 대체, 실행 제어, 추적 기능을 밀접하게 연결시켜 최상의 디버깅 능력을 제공함

  11. Gdb - GNU Debugger • Gdb(GNU Debugger)는 어떤 프로그램이 수행되는 도중 그 프로그램 내에서 어떤 일이 일어나는 지를 볼 수 있게 해 준다 • 프로그램을 수행시킨다 • 어떤 특별한 조건에서 프로그램의 수행을 stop시킨다 • 프로그램이 stop된 상태에서 그 프로그램의 내부를 볼 수 있다 • 프로그램의 일 부분을 수정한다 • stop된 프로그램을 continue시킨다

  12. Gdb - 시작 및 종료 • 디버깅 하기 위한 컴파일 옵션 • $ gcc -g prog.c • Gdb 시작 - Gdb prompt "(gdb)" 가 나옴 • $ gdb prog • 특정 프로그램을 디버깅 한다 • $ gdb prog core • 특정 프로그램 및 core 파일을 디버깅 한다 • $ gdb prog pid • 현재 수행 중인 프로그램(프로세스 번호)를 디버깅 한다 • $ gdb --args prog arg1 arg2 ... • 인수를 사용하는 프로그램을 디버깅 한다 • Gdb 종료 • quit 혹은 q 혹은 ^D

  13. Gdb - 프로그램 run • 프로그램 run • run 혹은 r • 인수 주면서 프로그램 run • run arg1 arg2 ... • 이미 수행 중인 프로세스 디버깅 시작 및 종료 • attach pid • detach

  14. Gdb - breakpoint 설정 • 특정 함수에 breakpoint 설정 • break function혹은 break filename:function • 프로그램 소스 줄에 breakpoint 설정 • break linenum혹은 break filename:linenum • 현재 위치에서 상대적 위치에 breakpoint 설정 • break +offset혹은 break -offset • 조건 breakpoint 설정 • break ... if cond • breakpoint 설정 지점 보기 • info breakpoints 참고: breakpoint는 프로그램의 수행을 stop시키는 지점

  15. Gdb - watchpoint 설정 • 프로그램에 의하여 expr이 써지면(write) breakpoint 형성 • watch expr • 프로그램에 의하여 expr이 읽혀지면(read) breakpoint 형성 • rwatch expr • expr이 써지거나(write) 혹은 읽혀지면(read) breakpoint 형성 • awatch expr • 설정된 watchpoint 보기 • info watchpoints 참고: watchpoint는 특정 식의 값이 변경되거나 읽혀질 때 프로그램의 수행이 stop하는 특별한 breakpoint임

  16. Gdb - continue, step, until, finish • stop된 프로그램의 수행 • continue [ignore-count] • c [ignore-count] • stop된 프로그램의 한 단계 수행 • step • step count • 프로그램의 특정 지점까지 수행하고 stop • until location • u location • 현재 수행 중인 함수의 수행을 끝내고 stop • finish

  17. Gdb - 스택 보기 • 스택 전체 보기 • backtrace 혹은 bt • backtrace n 혹은 bt n • 스택 프레임의 선택 • up n // 오래된 프레임 방향으로 • down n // 최근 프레임 방향으로 • 현재 선택된 프레임 정보 보기 • info frame • info f

  18. Gdb - 소스 파일 점검 • 소스 라인 프린트 • list linenum • list function • list • list - • 소스 파일 편집 • edit number • edit filename:number • edit function • edit filename:function

  19. Gdb - 데이터 값 보기 • expression 값 보기 • print expr • print /f expr // /f는 format(예: /d /o /x) • 메모리 값 보기 • x addr • x /nfu addr // n은 갯수, f는 format, u는 단위(예: b, h. w) • register 값 보기 • info registers // register 이름 보기(floating-point 제외) • info all-registers // register 이름 보기 • print $register

  20. Gdb - symbol table 보기 • 심볼 주소 보기 • info address symbol • 주소에 있는 심볼 이름 보기 • info symbol address • expression의 type 보기 • ptype expr • 어떤 함수 내의 모든 심볼 이름 보기 • info scope function

  21. Gdb - 프로그램 수정 • 변수 값 수정 • print x=4 • 다른 곳으로 jump • jump linespec • jump *address • 프로그램에 signal 보내기 • signal signal • 함수 부르기 • call expr • 함수에서 return • return expr

  22. Gdb - remote debugging 환경 • target - gdbserver 및 디버깅할 프로그램의 binary 필요 $ gdbserver host:port prog ... $ gdbserver /dev/ttya prog ... • host - gdb 및 디버깅할 프로그램의 binary(unstripped) 필요 $ gdb (gdb) file prog (gdb) target remote host:port혹은 target remote /dev/ttya (gdb) ...

More Related