프로그래밍/Rust
2. vscode에서 러스트 디버깅 하는 법
카카수(kakasoo)
2024. 3. 24. 21:15
반응형
바이너리에 대한 메모리 레이아웃
fn main() {
let a = 2;
let result = stack_only(a);
dbg!(result);
}
fn stack_only(b: i32) -> i32 {
let c = 3;
return b + c + stack_and_heap();
}
fn stack_and_heap() -> i32 {
let d = 5;
let e = Box::new(7);
return d + *e;
}
main
: 함수의 진입점으로, 여기서부터 프로그램이 시작된다.i32
: 32비트 정수를 의미한다.Bow::new(7)
: 러스트의 스마트 포인터 타입
이 코드를 해석하기 위해 일단 gdb
를 설치하자.
gdb는 GUI 환경에서 debugging을 도와주는 도구로, homebrew가 있다면 쉽게 설치할 수 있다.
나는 GUI 환경 대신 vscode의 확장으로 CodeLLDB
를 설치하고, 이걸로 vscode 내에서 디버깅을 하겠다.
브레이킹 포인트를 곳곳에 찍은 다음 Command + Shift + D로 디버깅과 실행 사이드바를 열 수 있다.
여기서 Debug exec를 실행해주면 된다.
launch.json
// root-folder/.vscode/launch.json
{
// IntelliSense를 사용하여 가능한 특성에 대해 알아보세요.
// 기존 특성에 대한 설명을 보려면 가리킵니다.
// 자세한 내용을 보려면 <https://go.microsoft.com/fwlink/?linkid=830387을(를)> 방문하세요.
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug executable",
"cargo": {
"args": ["build"]
},
"args": [],
"cwd": "${workspaceFolder}/target/debug"
}
]
}
vscode에서 디버거를 실행하기 위해서는 어떤 디버거를 사용할 것인지를 알려주어야 한다.
위처럼 내용을 넣으면 된다.
root-folder가 파일을 연 workspace라고 가정할 때, .vscode 폴더를 생성하고 안에 launch.json을 생성한다.
별도로 폴더와 파일을 생성하지 않더라도 debug를 실행시키면 설정이 비어있는 저 파일을 생성해준다.
반응형