Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Delve

Delve는 Go 언어를 위한 디버깅 툴이다.

설치

# go get -u github.com/derekparker/delve/cmd/dlv
dlv 실행파일은 $HOME/go/bin 에 설치된다. PATH를 등록하고 테스트해 보자.
# export PATH=$HOME/go/bin:$PATH
# dlv version
Delve Debugger
Version: 1.2.0
Build: $Id: 068e2451004e95d0b042e5257e34f0f08ce01466 $

Delve를 이용한 디버깅 준비

테스트 애플리케이션을 설치하자.
$ go get github.com/golang/example/...
$ cd $HOME/go/src/github.com/golang/example/

$ dlv debug .
Type 'help' for list of commands.

명령행을 이용한 디버깅

b (break)를 이용해서 브레이크포인트(breakpoint)를 설정 할 수 있다. main 함수에 브레이크포인트를 설정해 보자.
(dlv) b main.main
Breakpoint 1 set at 0x49c238 for main.main() ./hello.go:25

브레이크포인트까지 프로그램을 실행해보자. c (continue)명령으로 프로그램을 실행 할 수 있다.
(dlv) c
> main.main() ./hello.go:25 (hits goroutine(1):1 total:1) (PC: 0x49c238)
    20:		"fmt"
    21:	
    22:		"github.com/golang/example/stringutil"
    23:	)
    24:	
=>  25:	func main() {
    26:		fmt.Println(stringutil.Reverse("!selpmaxe oG ,olleH"))
    27:	}

내가 테스트 하려는 코드는 26라인에 있는 stringutil.Reverse함수다. n(next)로 다음 라인으로 이동할 수 있다.
(dlv) n
> main.main() ./hello/hello.go:26 (PC: 0x49c3bf)
    21:
    22:         "github.com/golang/example/stringutil"
    23: )
    24:
    25: func main() {
=>  26:         fmt.Println(stringutil.Reverse("!selpmaxe oG ,olleH"))
    27: }

여기에서 부터는 한 단위(step) 코드를 실행해야 할 것이다. s(step)명령으로 다음 단계의 코드에 진입할 수 있다.
(dlv) s
> github.com/golang/example/stringutil.Reverse() /home/yundream/go/src/github.com/golang/example/stringutil/reverse.go:21 (PC: 0x49c02b)
    16:	
    17:	// Package stringutil contains utility functions for working with strings.
    18:	package stringutil
    19:	
    20:	// Reverse returns its argument string reversed rune-wise left to right.
=>  21:	func Reverse(s string) string {
    22:		r := []rune(s)
    23:		for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
    24:			r[i], r[j] = r[j], r[i]
    25:		}
    26:		return string(r)

이제 다른 패키지의 함수에 진입했다. 디버깅을 위해서 매개변수 s의 값을 확인하고 싶다. p(print)로 확인해보자.
(dlv) p s
"!selpmaxe oG ,olleH"

이 함수의 핵심 알고리즘은 24라인이다. 24라인을 브레이크 포인트로 잡는다.
(dlv) b 24
Breakpoint 2 set at 0x49c0db for github.com/golang/example/stringutil.Reverse() /home/yundream/go/src/github.com/golang/example/stringutil/reverse.go:24

디버깅 명령들

vim에서 사용

참고