프로그래밍/기타

Visual Studio 2019 로 rust 디버깅하기(msvc Debug 로 디버깅)

한밀 2021. 3. 27. 11:25

  며칠전 vscode 로 rust 를 디버깅하는데 안되는 case 가 있어서 stackoverflow 에 질문을 올렸다. ( yiunsr.tistory.com/859 ). 그런데, 내 설명이 부족한 것인지, 내 영어 실력이 문제인 것인지 딱히 답변이 없었다. 계속 알아보니 VSCode 의 CodeLLDM 설명에 (github.com/vadimcn/vscode-lldb/wiki/Notes-on-Windows-support) *-pc-windows-gnu 를 추천한다는 말이 있었다. MSVC 로 컴파일 할 때 뭔가 잘 안되는 경우가 있나 보다가 내가 내린 결론이다. 그러다 더 찾아보니 GDB를 이용해서 디버깅 하는 방법도 있길래 Rust ToolChain 을 stable-x86_64-pc-windows-gnu 로 변경해서 테스트 해보았다. 내 경우 사용하는 라이브러리들이 컴파일 되지 않았다. 그러다 더 생각해 보니 GDB로 되면 Microsoft Visual Studio 2017, 2019 (무료버전) 을 이용해서 디버깅 할 수 있지 않을까 생각해게 되었다. 그래서 도전해 보니 너무 잘 되는 것이었다. 더 나가 vscode 에서 msvc 디버깅을 연동하면 될 수 있을 것 같아 시도해 봤는데, 이 경우에도 너무 잘되어서 누군가에게 도움이 될 수 있도록 설명을 남겨둔다.
Visual Studio 2019 라고 제목을 적었지만 Visual Studio 2017 에서도 잘 되었다. 

 

Visual Sutdio 2019 에서 Rust 코드 디버깅하기

* 전제 조건은 컴파일은 기존대로 cargo 를 통해 디버깅 모드로 컴파일 해야 한다.
* Rust toolchain 은 stable-x86_64-pc-windows-msvc 로 컴파일 해야 한다. 
1. cargo 프로젝트 생성
 (제 경우 D:\workspace\vscode 하위에 프로젝트를 생성했습니다. 

D:\workspace\vscode>cargo new hello_world --bin

 

==== main.rs ====

1 부터 100까지의 합과 1부터 100까지의 곱을 구하는 프로그램이다. 

use std::time::Instant;

fn main() {
    println!("======== Start Program ========");
    let start = Instant::now();

    let mut sum:u64 = 0;
    for n in 1..100{
        sum = sum + n;
    }

    let mut fac:f64 = 1.0;
    for n in 1..100{
        fac = fac * (n as f64);
    }

    let duration = start.elapsed();
    println!("sum {}", sum);
    println!("factorial {}", fac);
    println!("Time elapsed in expensive_function() is: {:?}", duration);
    println!("======== End Program ========");
}

 

2. build 

build 는 기존대로 한다. 

cargo build 


3. visual studio 에서 폴더 열기
  visual sutdio 2019 실행 -> 로컬폴더 열기

hello_world 디렉토리를 선택한다. 

4. 디버깅 프로그램 선택
  Visual Sutdio 2019 는 디버깅 해야 하는 대상을 모르기 때문에 프로그램을 실행하면서 디버깅 할 수 없다. 
 솔류션 탐색기에서 target/debug/hello_world.exe 에 대해 오른쪽 마우스를 눌러서 시작항목으로 설정한다.

5. break point 설정
 src/main.rs 파일을 열고 break point 를 설정한다. 

6. 디버깅 하기
 메뉴  디버그 -> 디버그 시작   을 클릭한다. 

이렇게 하면 break point 가 걸린다. 그리고 당연히 조사식도 잘 보인다. 

 

다음에는 vscode 로 이런 것을 하는 방법에 대해 글을 남기도록 하겠다.