며칠전 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 로 이런 것을 하는 방법에 대해 글을 남기도록 하겠다.