VS Code를 사용하여 Golang을 디버그하도록 Delve 및 Air 설정

王林
풀어 주다: 2024-08-10 06:49:32
원래의
695명이 탐색했습니다.

Setting up Delve and Air to debug Golang with VS Code

VS 코드 확장

VS Code Extensions에서 Go를 검색하여 설치하세요.

  • https://marketplace.visualstudio.com/items?itemName=golang.Go

디버거

VS Code에서 디버깅(중단점, 단계별 실행 등)을 수행하려면 Delve를 설치해야 합니다.

go install github.com/go-delve/delve/cmd/dlv@latest
로그인 후 복사

asdf를 사용하여 Go를 설치한 경우 delve는 다음 위치에 있습니다.

~/.asdf/shims/dlv
로그인 후 복사

go 패키지를 설치한 후 asdf rehim을 실행할 수도 있습니다.

라이브 리로딩

GoLang은 컴파일된 언어이므로 코드는 단일 실행 파일로 컴파일됩니다. 개발 중에 변경 사항을 적용하려면 지속적으로 재컴파일해야 하며, 이는 특히 VS Code에서 수동 프로세스가 될 수 있습니다.

https://github.com/air-verse/air를 사용하여 실시간으로 다시 로드하겠습니다.

변경 사항을 감시하기 위해 프로젝트 폴더 내에서 한 번만 실행하면 되는 명령줄 도구입니다.

설치

패키지를 설치합니다. v1.22 이상을 사용한다고 가정합니다.

go install github.com/air-verse/air@latest
로그인 후 복사

asdf를 사용하여 Go를 설치한 경우 air는 다음 위치에 위치합니다.

~/.asdf/shims/air
로그인 후 복사

프로젝트 루트에서 air.toml 구성 파일을 초기화합니다

cd ~/myproject
air init
로그인 후 복사

air.toml [[go build]] 명령을 다음과 같이 편집합니다.
- all: 플래그는 빌드 패키지의 모든 패키지에 적용되어야 합니다
- -N: 더 쉬운 디버깅을 위해 생성된 코드를 소스 코드에 더 가깝게 보장하기 위해 최적화를 비활성화했습니다
- -l: 함수 호출의 오버헤드를 줄이기 위해 작은 함수가 확장되는 인라인 최적화를 비활성화하여 디버깅을 더 쉽게 만듭니다
- Delve 참고자료를 통한 추론

- cmd = "go build -o ./tmp/main ."
+ cmd = 'CGO_ENABLED=0 go build -gcflags=all="-N -l"-o ./tmp/main .'"'
로그인 후 복사

[!정보]
다음과 같은 경우 air가 기본 구성으로 실행됩니다.

  • air.toml 파일이 잘못되었습니다
  • air 명령을 실행하여 프로젝트 폴더에서 실행하세요.

air.toml 파일은 사용되지 않습니다.

air.toml full_bin을 편집하여 [[Delve]]로 빌드된 바이너리를 실행하세요.

- full_bin = ""
+ full_bin = "dlv exec ./tmp/main --listen=127.0.0.1:2345 --headless=true --api-version=2 --accept-multiclient --continue --log --"
로그인 후 복사

이렇게 하면 포트 2345에서 Delve가 실행됩니다.

프로젝트 폴더에서 air를 실행하세요. 다음 출력이 표시됩니다.

> cd ~/my-project
> air
  __    _   ___  
 / /\  | | | |_) 
/_/--\ |_| |_| \_ v1.52.3, built with Go go1.22.5

mkdir ~/my-project/tmp
watching .
!exclude tmp
building...
running...
API server listening at: 127.0.0.1:2345
2024-07-28T18:47:07+07:00 info layer=debugger launching process with args: [./tmp/main]
2024-07-28T18:47:09+07:00 debug layer=debugger entryPoint 0x1006e8000 machoOff 0x100000000
2024-07-28T18:47:09+07:00 warning layer=debugger debug_frame workaround not applied: function internal/abi.(*RegArgs).IntRegArgAddr (at 0x1006e9070) covered by 0x1006e9070-0x1006e9110
2024-07-28T18:47:09+07:00 debug layer=debugger Adding target 11503 "/Users/alaay/projects/scheduleasy/tmp/main"
2024-07-28T18:47:09+07:00 debug layer=debugger continuing
2024-07-28T18:47:09+07:00 debug layer=debugger ContinueOnce
2024/07/28 18:47:09 Starting server on :5602
로그인 후 복사

Delve에 VS Code 연결

.vscode/launch.config 파일에 다음을 추가하세요.

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Attach to Air",
      "type": "go",
      "request": "attach",
      "mode": "remote",
      "port": 2345,
      "host": "127.0.0.1"
    }
  ]
}
로그인 후 복사

VS Code 실행 및 디버그(CMD + SHIFT + D)에서 Attach to Air를 사용하여 디버깅을 시작하세요

[!info] VS Code를 연결할 수 없습니다
VS Code를 연결할 수 없는 경우 Delve가 포트 2345에서 실행되고 있지 않을 가능성이 높습니다. lsof -i :2345를 사용하여 dlv가 해당 포트를 사용하여 실행되고 있는지 확인하세요. 실행 중인 경우 다음이 표시됩니다.

$ lsof -i :2345
COMMAND   PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
dlv     15464 username    3u  IPv4 0x201bff14586139e3      0t0  TCP localhost:dbm (LISTEN)
로그인 후 복사

문제

Go는 컴파일된 언어입니다. 즉, 코드가 바이너리로 컴파일된 다음 실행됩니다. vscode의 코드를 변경할 때마다:

  • 공기는 변화를 지켜볼 것입니다
  • 바이너리 다시 빌드
  • 23:45에 Delve 시작

이는 vscode의 연결이 끊어지고 탐색하려면 vscode를 다시 연결해야 함을 의미합니다.

위 내용은 VS Code를 사용하여 Golang을 디버그하도록 Delve 및 Air 설정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!