Go 语言编程 — 使用 delve 进行 DEBUG 调试

目录

文章目录

  • 目录
  • delve

delve

Golang 支持使用 GDB 来进行调试,这与 C 语言几乎是一致的。但 GDB 是一个通用性调试工具,不非常能直接地反映出 Golang 的特点,例如:goroutine 语句的调试。

所以,推荐使用 delve(https://github.com/go-delve/delve),可以理解为是 Golang 版本的 GDB,使用方式大致与 GBD 一致。

安装:

go get -u github.com/derekparker/delve/cmd/dlv

测试程序:

package main

import (
	"fmt"
	"log"
	"net/http"
	"os"
)

const port = "8000"

func hi(w http.ResponseWriter, r *http.Request) {
	hostname, _ := os.Hostname()
	fmt.Fprintf(w, "HostName: %s", hostname)
}

func main() {
	http.HandleFunc("/hi", hi)

	fmt.Println("runing on port: " + port)
	log.Fatal(http.ListenAndServe(":"+port, nil))
}

进入调试环境:

$ dlv debug ./main.go
Type 'help' for list of commands.
(dlv)

MAC pro 可能需要验证:
Go 语言编程 — 使用 delve 进行 DEBUG 调试_第1张图片

$ dlv debug ./main.go
Type 'help' for list of commands.
(dlv) b hi
Breakpoint 1 set at 0x135a078 for main.hi() ./main.go:12
(dlv) c
runing on port: 8000
> main.hi() ./main.go:12 (hits goroutine(6):1 total:1) (PC: 0x135a078)
Warning: listing may not match stale executable
     7:		"os"
     8:	)
     9:
    10:	const port = "8000"
    11:
=>  12:	func hi(w http.ResponseWriter, r *http.Request) {
    13:		hostname, _ := os.Hostname()
    14:		fmt.Fprintf(w, "HostName: %s", hostname)
    15:	}
    16:
    17:	func main() {
(dlv) p w

常用选型:

  • b:设置断点。
  • n:执行到下一行。
  • s:单步执行。
  • p:输出变量值。
  • args:打印所有参数信息。
  • locals:打印所有本地变量。

挂载(Attach)形式的调试

dlv attach 

你可能感兴趣的:(Golang)