준비물 : 터미널 창 두개

🐞 터미널 1 : OS 실행

// 터미널 1에서 입력 (경로: /pintos-kaist/threads/build)
pintos --gdb -- -q run alarm-multiple 

🐞 터미널 2 : 코드 한줄씩, 혹은 브레이크포인트 단위로 이동하기

// 여기서부터는 터미널2에서 입력 (경로: /pintos-kaist/threads/build) (부팅부터 진행과정이 터미널 1에 나타남)
gdb kernel.o	

/*
  필수는 아니지만 만약 lay next 사용하고 싶다면, 여기서 lay next 입력하고 엔터두번
  (엔터 한번 누르고 한번 더 누르면, 소스코드가 보이기 시작할거임)
*/ 

// 멈추고 싶은 함수이름에 break point 걸기 
b main              
b run_actions
b test_sleep

// 왼쪽에 띄워놓은 로컬호스트로 원격접속 
target remote localhost:1234  

continue

// c 를 통해 다음 브레이크 포인트로 점프
// s 로 해당 함수 들어가기
// 함수에서 n 으로 한줄씩 이동하면서, info locals, print(변수), watch 변수 를 통해 값 확인

(디버깅 중지하고 싶으면 continue로 OS 끝까지 실행하고 빠져 나오기)

🐞 TIP : GDB 명령어


next   // (또는 n) 다음 라인으로 이동

continue     // (또는 c) 다음 브레이크 포인트로 이동

bt   // 현재시점의 backtrace 출력

s    // 해당 라인의 함수로 step in

quit    // (또는 q)  종료

info locals   // 현재시점의 지역변수 다 보기 

watch [전역변수명]    //  next 이동시마다 값의 변화가 찍힘

🐞 pintos thread.init 에서의 디버깅 플로우

thread.init.c

test.c

[56] t->function (); > s (test.c로 이동하게 됨)

alarm-wait.c

[24] test_sleep (5, 7); > s (test.c로 이동하게 됨)