VS Code로 Rust 디버깅
경력 초기(2008년)에 저는 Oracle PL/SQL 개발자가 되었습니다. 아직 정확한 이유는 모르지만 당시에는 디버거를 사용하지 않았습니다. 버그를 수정하기 위해 모든 곳에 메시지를 추가하고 문제를 격리하려고 합니다. 더 똑똑한 아이들은 "이진 검색"방식을 사용하여 100줄마다 메시지를 만들고 문제가 있는 줄 사이(예: 300~400줄)를 찾은 다음 검색을 세분화하여 10줄마다 메시지를 배치합니다(310, 320 등).
Oracle에서 일하다가 SAP와 SAP의 ABAP 언어(환상적인 디버거가 있음)로 작업을 옮겼을 때 저는 새로운 세상을 발견했습니다. 그러다가 다시 (Rust로) 기술을 변경해야 할 때가 되었을 때 갑자기 이 질문이 두려웠습니다.
이것이 내가 찾은 답입니다.
목적: VSCode에서 Rust 디버깅
먼저 확장 프로그램이 필요합니다.
왜 필요한가요?
짧은 답변: Rust 컴파일러는 LLVM을 사용하여 시스템과 상호 작용하며 이러한 확장을 통해 이 수준에서 실행되는 코드와 상호 작용할 수 있습니다(Rust가 컴파일되기 때문에).
긴 답변: 제 월급 이상으로 저는 귀하의 컴퓨터에 물건을 설치하는 지원 담당자일 뿐입니다. 나에게 묻는 대신 this을 확인하십시오.
이제 VSCode에서 다음 단계를 따릅니다.
Run
> Start Debugging
> Ok
> Yes
![](https://s1.md5.ltd/image/58fa66781fc933feb5cbd307354700b3.png)
![](https://s1.md5.ltd/image/d6181db76fe7532d73f015f2509b58ae.png)
![](https://s1.md5.ltd/image/93075055b5d350d1a44e0729a8adc53f.png)
예상 결과는 다음과 같은 파일
/.vscode/launch.json
생성입니다.// File copied from MacOS X
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug unit tests in library 'yourprogram'",
"cargo": {
"args": [
"test",
"--no-run",
"--lib",
"--package=yourprogram"
],
"filter": {
"name": "yourprogram",
"kind": "lib"
}
},
"args": [],
"cwd": "${workspaceFolder}"
}
]
}
또는 Windows를 사용하는 경우 다음과 같습니다.
{
"version": "0.2.0",
"configurations": [
{
"name": "(Windows) Launch",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceRoot}/target/debug/yourprogram.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"console": "externalTerminal"
}
]
}
어떤 이유로 파일이 자동으로 생성되지 않은 경우 파일을 복사하여 붙여넣을 수 있습니다(src 폴더와 동일한 수준에 .vscode 폴더 생성).
다른 OS의 예제 파일 외에도 첫 번째 파일에는 라이브러리 크레이트가 있고 두 번째 파일은 바이너리입니다. 동일한 프로젝트에 두 크레이트가 모두 있는 경우
configurations
아래에 두 개 또는 세 개의 항목이 있습니다(테스트가 있는지 여부에 따라 다름).이제 이론적으로 코드에 중단점을 추가할 수 있습니다(왼쪽 열을 클릭하여 이 빨간색 점 생성).
![](https://s1.md5.ltd/image/7ee73a3f65283bf242aa3589345b38bd.png)
![](https://s1.md5.ltd/image/71bfb4e16cf3b985e496e2136706b92b.png)
중단점이 설정되면
F5
를 누르거나 Run
> Start Debugging
로 이동합니다(파일이 있으므로 이제 작동해야 함). 결과는 다음과 같아야 합니다. ![](https://s1.md5.ltd/image/2c1fba795eaa08686d86526bfde33511.png)
기본적으로 왼쪽에는 메모리에 로드된 값이 있습니다. 이러한 정수와 같은 유형을 처리하는 동안에는 상황이 매우 간단하지만 HashMaps와 같은 항목을 로드할 때는 상당히 복잡해질 수 있습니다. 그래도 없는 것보다는 훨씬 낫습니다.
당신을 위해 운동하지 않았다? 다른 사람도 비슷한 문제를 겪을 가능성이 높으므로 여기에 설명을 하십시오.
디버그 작업
![](https://s1.md5.ltd/image/1cd2a93eac35e44bbc54d84098ceb488.png)
F5
계속: 다른 중단점에 도달할 때까지 프로그램을 실행합니다. F10
스텝 오버: 들어가지 않고 스텝을 실행합니다. 예. 함수이면 들어가지 않습니다. F11
Step Into: 진입하여 단계를 실행합니다. Shift
+ F11
나가기: 예. 함수에 있으면 호출자에게 돌아갑니다. Shift
+ Cmd
/Ctrl
+ F5
다시 시작: 처음부터 실행합니다. Shift
+ F5
중지: 실행을 중지합니다. 그게 다야. 이제 당신은 내 첫 직장에서 똑똑한 아이들보다 더 똑똑합니다 :)
표지 사진 by Danilo Batista .
Reference
이 문제에 관하여(VS Code로 Rust 디버깅), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rogertorres/debugging-rust-with-vs-code-11dj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)