Go 언어용 디버거, dlv

By @ingee4/5/2018golang

개요

  • dlv 는 go 언어용 공식 디버거
  • go 언어로 개발한 어플리케이션을 소스코드 레벨에서 디버깅할 수 있음

설치 및 사용 방법

  • 설치방법: https://github.com/derekparker/delve 문서 참조
  • 사용방법
    • $ dlv debug : main 패키지가 존재하는 디렉토리에서 어플리케이션에 대한 디버깅 시작
    • $ dlv test <package-name> : _test.go 테스트 케이스에 대한 디버깅 시작
    • (dlv) break <package-name>.<func-name>: break-point 설정
    • (dlv) next: 다음 줄 실행
    • (dlv) continue: 다음 break-point 까지 계속 실행
    • (dlv) print <variable-name>: 변수 값 조회

사용예

PS D:\git\go\src\hello> dlv debug
Type 'help' for list of commands.
(dlv) break main.main
Breakpoint 1 set at 0x4aa216 for main.main() D:/git/go/src/hello/hello.go:5
(dlv) continue
> main.main() D:/git/go/src/hello/hello.go:5 (hits goroutine(1):1 total:1) (PC: 0x4aa216)
     1: package main
     2:
     3: import "fmt"
     4:
=>   5: func main() {
     6:   fmt.Printf("Hello, world\n")
     7: }
(dlv) next
> main.main() D:/git/go/src/hello/hello.go:6 (PC: 0x4aa224)
     1: package main
     2:
     3: import "fmt"
     4:
     5: func main() {
=>   6:   fmt.Printf("Hello, world\n")
     7: }
(dlv) next
Hello, world
> main.main() D:/git/go/src/hello/hello.go:7 (PC: 0x4aa24e)
     2:
     3: import "fmt"
     4:
     5: func main() {
     6:   fmt.Printf("Hello, world\n")
=>   7: }
(dlv) continue
Process 11340 has exited with status 0
(dlv)

특이사항

  • WSL (Windows Subsystem for Linux) 에서는 dlv 가 정상 실행되지 않음
    • dlv debug 명령을 실행시키면 아무 응답 없다가, CTRL+C 를 누르면 한꺼번에 실행되고 종료됨 (디버깅 못함)
    • WSL 팀에서 관련 이슈를 인지하고 해결 중 (dlv 문제가 아니라 WSL 의 문제인 듯 보임)

comments