Suhwanc

 

이번엔 ARM 어셈블리 코드로 작성한 파일을 디버깅하는 방법에 대해 알아보겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@ suhwan++20201108
@ debug practice
 
.text
_start: .global _start
 
    mov r1, #0
 
loop:
    cmp r1, #10
    bge exit
 
    add r1, r1, #1
    b loop
exit:
    mov r0, #0
    mov r7, #1
    swi 0
 
.end
cs

먼저, 이번에 사용할 코드입니다.

아주 단순하게 1부터 10까지 r1을 +1씩 증가시키고, 10이 되면 프로그램을 종료하는 코드입니다.

 

 

1. 디버그 옵션 설정

-> 디버그 옵션은 as(오브젝트 파일로 변환)할 때 "-g" 옵션을 설정하면 됩니다.

-> 이후 gdb (파일 이름)을 통해 디버그 모드로 진입합니다.

 

 

2. 디버그(gdb) 커맨드

 

1) l : 코드를 10줄 단위로 보여줍니다.

 

2) b (line num or function) : 지정한 라인 또는 함수에 브레이크 포인트를 걸어줍니다.

3) r : 걸어준 브레이크 포인트까지 프로그램을 실행합니다.

 

4) s : 한 줄 단위로 프로그램을 실행합니다.

 

5) info reg : 레지스터들의 상태를 보여줍니다.

 

-> 디버그 모드에서 가장 중요한 커맨드입니다. 각 레지스터의 주소 값과 저장된 값을 보여줍니다.

 

이 상태에서 루프를 여러번 돌면 다음과 같이 레지스터 값이 변하게 됩니다.

 

다른 명령어도 몇 개 더 있지만 자주 사용하지 않아 여기까지만 써둡니다.

 

하지만 코드를 짜다보면 디버그 사용할 일이 많아서 이 정도까진 직접 테스트해보시는 것을 추천합니다!

 

(추가) gdb 모드 탈출 커맨드는 "quit" 입니다!

'System Programming(ARM)' 카테고리의 다른 글

[ARM] Signal Handling  (0) 2020.12.03
10. Signals  (0) 2020.12.03
[ARM] 반복문으로 문자열 출력하기  (0) 2020.11.08
[ARM] 스택으로 버퍼 대체하기  (0) 2020.11.08
[ARM] System Call 정리  (0) 2020.11.08