VS Code로 Rust 디버깅

(포르투갈어 번역이 있습니다.)

경력 초기(2008년)에 저는 Oracle PL/SQL 개발자가 되었습니다. 아직 정확한 이유는 모르지만 당시에는 디버거를 사용하지 않았습니다. 버그를 수정하기 위해 모든 곳에 메시지를 추가하고 문제를 격리하려고 합니다. 더 똑똑한 아이들은 "이진 검색"방식을 사용하여 100줄마다 메시지를 만들고 문제가 있는 줄 사이(예: 300~400줄)를 찾은 다음 검색을 세분화하여 10줄마다 메시지를 배치합니다(310, 320 등).

Oracle에서 일하다가 SAP와 SAP의 ABAP 언어(환상적인 디버거가 있음)로 작업을 옮겼을 때 저는 새로운 세상을 발견했습니다. 그러다가 다시 (Rust로) 기술을 변경해야 할 때가 되었을 때 갑자기 이 질문이 두려웠습니다.

이것이 내가 찾은 답입니다.


목적: VSCode에서 Rust 디버깅



먼저 확장 프로그램이 필요합니다.
  • Unix(Mac, Linux, ...)? 가져오기CodeLLDB
  • Windows에서? 가져오기C/C++

  • 왜 필요한가요?

  • 짧은 답변: Rust 컴파일러는 LLVM을 사용하여 시스템과 상호 작용하며 이러한 확장을 통해 이 수준에서 실행되는 코드와 상호 작용할 수 있습니다(Rust가 컴파일되기 때문에).

  • 긴 답변: 제 월급 이상으로 저는 귀하의 컴퓨터에 물건을 설치하는 지원 담당자일 뿐입니다. 나에게 묻는 대신 this을 확인하십시오.

  • 이제 VSCode에서 다음 단계를 따릅니다. Run > Start Debugging > Ok > Yes





    예상 결과는 다음과 같은 파일/.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 아래에 두 개 또는 세 개의 항목이 있습니다(테스트가 있는지 여부에 따라 다름).

    이제 이론적으로 코드에 중단점을 추가할 수 있습니다(왼쪽 열을 클릭하여 이 빨간색 점 생성). 할 수 없다면 이 옵션이 비활성화되어 있기 때문입니다. 이 문제를 해결하려면 설정을 열고 디버그(기능 아래에서 검색 표시줄에 "중단점"을 입력하여 빠르게 찾을 수 있음)로 이동한 다음 "모든 위치에서 중단점 허용"옵션을 선택합니다.

    중단점이 설정되면 F5를 누르거나 Run > Start Debugging로 이동합니다(파일이 있으므로 이제 작동해야 함). 결과는 다음과 같아야 합니다.

    기본적으로 왼쪽에는 메모리에 로드된 값이 있습니다. 이러한 정수와 같은 유형을 처리하는 동안에는 상황이 매우 간단하지만 HashMaps와 같은 항목을 로드할 때는 상당히 복잡해질 수 있습니다. 그래도 없는 것보다는 훨씬 낫습니다.

    당신을 위해 운동하지 않았다? 다른 사람도 비슷한 문제를 겪을 가능성이 높으므로 여기에 설명을 하십시오.

    디버그 작업



    마지막으로 디버깅하는 동안 수행할 수 있는 작업은 다음과 같습니다(왼쪽에서 오른쪽으로).
  • F5 계속: 다른 중단점에 도달할 때까지 프로그램을 실행합니다.
  • F10 스텝 오버: 들어가지 않고 스텝을 실행합니다. 예. 함수이면 들어가지 않습니다.
  • F11 Step Into: 진입하여 단계를 실행합니다.
  • Shift + F11 나가기: 예. 함수에 있으면 호출자에게 돌아갑니다.
  • Shift + Cmd/Ctrl + F5 다시 시작: 처음부터 실행합니다.
  • Shift + F5 중지: 실행을 중지합니다.

  • 그게 다야. 이제 당신은 내 첫 직장에서 똑똑한 아이들보다 더 똑똑합니다 :)

    표지 사진 by Danilo Batista .

    좋은 웹페이지 즐겨찾기