티스토리 뷰
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
코드 내에 불투명하게 되어 무시되는 부분들이 돌아온 것을 확인할 수 있다.
디버깅 방법
GDB with vscode
위의 extension들을 설치했다고 가정하고 핀토스 디버깅 방법 정리
- extension
naive debug
설치 - 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" } ] }
- 현재 진행중인 프로젝트 내부에서
make
ex) /src/userprog $ - 생성된 build 디렉토리에서 pintos 실행 --gdb 옵션 추가
- ex) pintos --gdb --filesys-size=2 -p ../examples/echo -a echo -- -f -q run 'echo x’
- 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를 확인하기 좋다.
- 어느 함수 stack에서 call되었는지, format string을 통해 printf와 같이 원하는 변수를 출력할 수 있다.
- 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
TAG
- 분할 정복
- System call
- Web
- 코딩
- 해커톤
- 뿌요뿌요 테트리스
- 정보보호병
- 백준
- react
- pintos
- letsencrypt
- 리눅스
- 웹IDE
- 사이버정보지식방
- ttyd
- FastAPI
- 시간 초과
- pvm
- 뿌요뿌요
- 서버 관리
- codeanywhere
- 앱
- Python
- 런타임 에러
- 프로젝트
- 싸지방
- 토이프로젝트
- C
- 구름ide
- Django
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함