kakasoo

2. vscode에서 러스트 디버깅 하는 법 본문

프로그래밍/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를 실행시키면 설정이 비어있는 저 파일을 생성해준다.

반응형