티스토리 뷰

CS/OS

Pintos 디버깅 팁

코코팜 2023. 12. 30. 18:56

vscode

우분투 환경에서 진행하는 핀토스는 vscode에서 remote-ssh로 접속해 ide 환경에서 작업 가능하다. 여러 파일을 이동해가며 구현해야 하기에 IDE 환경에서 하는걸 추천함

추천 extension

remote-ssh

vscode에서 local환경 외에 ubuntu 서버에 접속해 local 환경처럼 작업할 수 있게 하는 extension

C/C++ extension

C언어 snippet, debug 등 다양한 기능을 하는 extension으로 깔아두면 함수 ref 이동, 문법오류 등 도움 많이 됨

다만 pintos환경에선 실행에 따라 #ifdef 와 같이 전처리 지시어등이 있는데 이를 에디터에서 적용해서 볼려면 추가적으로 properties 설정을 해주어야 한다.

control + shift + P 를 통해 명령어 창을 열고

 

properties 파일이 생성되면 defines에 추가해주면 ex) USERPROG

threads/init.c

 

코드 내에 불투명하게 되어 무시되는 부분들이 돌아온 것을 확인할 수 있다.

디버깅 방법

GDB with vscode

위의 extension들을 설치했다고 가정하고 핀토스 디버깅 방법 정리

 

  1. extension naive debug 설치
  2. workspace 에 launch.json 파일 생성
    {
        "configurations": [
            {
                "type": "gdb",
                "request": "attach",
                "name": "Attach to gdbserver : threads",
                "executable": "${workspaceRoot}/src/userprog/build/kernel.o",
                "target": "localhost:1234",
                "remote": true,
                "cwd": "${workspaceRoot}",
                "valuesFormatting": "parseText"
            }
        ]
    }​
  3. 현재 진행중인 프로젝트 내부에서 make ex) /src/userprog $
  4. 생성된 build 디렉토리에서 pintos 실행 --gdb 옵션 추가 
  5. ex) pintos --gdb --filesys-size=2 -p ../examples/echo -a echo -- -f -q run 'echo x’
  6. vscode 좌측 디버그 탭에서 attach to gdb 에 연결

 

 

 

이후 브레이크 포인트 설정하면서 디버깅 가능

PANIC, ASSERT macro

핀토스는 multi thread 환경으로 printf와 같이 stdout으로 디버깅하기 어렵다. context switch때문에 원하는 flow대로 작동하는지 확인하고 싶지만 매우 어렵다.

때문에 내장 helper macro를 이용하여 디버깅을 진행하면 된다.

  • PANIC
    • 어느 함수 stack에서 call되었는지, format string을 통해 printf와 같이 원하는 변수를 출력할 수 있다. PANIC(”address : %p”,memory)
    • 해당 매크로 실행 시, 인자로 넘긴 문자열을 출력하며 바로 핀토스를 종료시킨다. 단순히 process 및 thread를 종료시키는 것이 아니라 핀토스 운영체제 자체를 종료시키게 control flow를 확인하기 좋다.
  • NOT_REACHED
    • PANIC과 마찬가지로 해당 매크로 실행 시, pintos가 종료된다.
  • ASSERT
    • 인자로 condition을 넘기고 해당 condition이 false라면 PANIC을 call한다. 따라서 module별로 ASSERT를 추가해 놓으면 좋다.

'CS > OS' 카테고리의 다른 글

system call deep dive  (0) 2024.06.01
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함