준비물 : 터미널 창 두개
// 터미널 1에서 입력 (경로: /pintos-kaist/threads/build)
pintos --gdb -- -q run alarm-multiple
// 여기서부터는 터미널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 끝까지 실행하고 빠져 나오기)
next // (또는 n) 다음 라인으로 이동
continue // (또는 c) 다음 브레이크 포인트로 이동
bt // 현재시점의 backtrace 출력
s // 해당 라인의 함수로 step in
quit // (또는 q) 종료
info locals // 현재시점의 지역변수 다 보기
watch [전역변수명] // next 이동시마다 값의 변화가 찍힘
thread.init.c
test.c
[56] t->function (); > s (test.c로 이동하게 됨)
alarm-wait.c
[24] test_sleep (5, 7); > s (test.c로 이동하게 됨)