-
Pintos 디버그 세팅하기Archive/Tips 2024. 4. 26. 14:58
pintos kaist 프로젝트를 시작하게 되었다. 디버깅에 관한 팁을 적고자한다.
pintos kaist 공식 문서에서 제공하는 디버깅 방법중 하나인 gdb 사용 법을 우선 적어보고자 한다.
편하게 디버깅 툴을 쓰던 것과 달리 꽤나 원시적이라고 느껴서 이를 원시인 방법이라고 적겠다 🙉🙉
원시인 디버깅
1. gdb 가 설치되어있는가?
우선 실행 환경에 gdb를 설치할것
커널에gdb
를 쳐서 설치되었는지 확인해보고 없다면
sudo apt install gdb
로 설치
2. pintos 실행
핀토스를 실행할때 여러 옵션을 주고 실행할 수 있는 것을 아는가? pintos.c 를 까보아도 되고 pintos -h 를 실행해도 된다.
--gdb
옵션을pintos
명령어 다음에 인자로 주면 디버깅 을 할수있다.추가 tip
`--` 인자는 qemu 옵션과 핀토스 옵션을 구분하기 위한 인자 `--` 기준 왼쪽은 qemu, 오른은 핀토스추가 tip
pintos의 run 명령어에도 옵션을 줄수 있다. 입력 순서는 [옵션] [액션(run 같은거)].
-h run 을 쳐보자! 그러면 run이라는 액션에 -h 라는 옵션을 주고 실행된다.
-q 를 넣으면 핀토스 실행이 종료되고 원래 터미널로 돌아온다 자세한건 run -h 확인3. gdb 프로그램 실행
gdb 프로그램에 디버깅할 파일 을 인자로 주고 실행하면된다.
여기서 핀토스는 localhost:1234 포트로 디버깅 통신을 주고 받기 때문에 gdb 프로그램에target remote localhost:1234
를 쳐서 gdb와 연결해주어야 한다.
예시.
1. 디버깅할 파일 실행하기
pintos-kaist/threads/build 로 이동
pintos --gdb -- -q run alarm-multiple
실행
2. 디버거 키기
새로운 커널을 키고 pintos-kaist/threads/build 로 이동 (디버깅할 파일 위치를 인자로 주어야되는 이걸 쉽게 하기위해 이동한것임)
gdb kernel.o
입력
target remote localhost:1234
입력
gdb 문법으로 디버깅 시작.
break thread.c:99 // thread.c 파일의 99번 줄에 중단점 지정c 를 치면 다음 중단점까지 파일 실행함.
이부분은 알아서!
호모사피언스 디버깅법
위에 방법은 너무 막막하다... 지성인 답게 쉽게 해보자
1. vscode 에서 확장에서 native Debug 설치
2.
pintos-kaist
디렉토리 아래에.vscode
디렉토리 만들고launch.json
파일 만들기launch.json
{ "configurations": [ { "type": "gdb", "request": "attach", "name": "Attach to gdbserver : threads", "executable": "${workspaceRoot}/threads/build/kernel.o", "target": "localhost:1234", "remote": true, "cwd": "${workspaceRoot}", "valuesFormatting": "parseText" } ] }
위의 코드를 보면 우리가 앞서 했던 원시인 디버깅 법이랑 똑같은 방식임을 알수있다!!! 대박
3. 프로그램 실행할때 디버깅 옵션주기
pintos --gdb -- -q run alarm-multiple
원래 vscode 에서 디버깅 핟듯이 중단점 찍고 디버거 버튼 누르면 편하게 디버깅 가능!
'Archive > Tips' 카테고리의 다른 글
VSCode 디버그 세팅 (0) 2024.04.12