Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "디버깅 환경 및 방법 Lecture #14."— 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 - 시작 및 종료 디버깅 하기 위한 컴파일 옵션 Gdb 시작 - Gdb prompt "(gdb)" 가 나옴 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 이미 수행 중인 프로세스 디버깅 시작 및 종료
run arg1 arg2 ... 이미 수행 중인 프로세스 디버깅 시작 및 종료 attach pid detach

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

15 Gdb - watchpoint 설정 watch expr rwatch expr awatch expr
프로그램에 의하여 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 // 오래된 프레임 방향으로
스택 전체 보기 backtrace 혹은 bt backtrace n 혹은 bt n 스택 프레임의 선택 up n // 오래된 프레임 방향으로 down n // 최근 프레임 방향으로 현재 선택된 프레임 정보 보기 info frame info f

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

19 Gdb - 데이터 값 보기 print expr print /f expr // /f는 format(예: /d /o /x)
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
심볼 주소 보기 info address symbol 주소에 있는 심볼 이름 보기 info symbol address expression의 type 보기 ptype expr 어떤 함수 내의 모든 심볼 이름 보기 info scope function

21 Gdb - 프로그램 수정 print x=4 jump linespec jump *address signal signal
변수 값 수정 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) ...


Download ppt "디버깅 환경 및 방법 Lecture #14."

Similar presentations


Ads by Google