Contents

Delve runtime 除錯

描述

因應在 debug runtime 時,無法輸入一般的 log 模式

因此我們需要來使用 Delve

安裝

go install github.com/go-delve/delve/cmd/dlv@latest

除錯

可以創建一個範例

## main

package main

import (
	"fmt"
)

func main() {
	m := map[int8]int{
		1:1,
		2:2,
		3:3,
	}

	v1 := m[3]
	v2, ok := m[2] // ok是一个bool值,用于判断是否存在2这个key

	fmt.Println(v1)
	fmt.Println(v2, ok)
}

接下來就執行

dlv debug main.go

==>

Type 'help' for list of commands.
(dlv)

目前只是開啟 dlv 的程式而已,還沒開始跑

需要下中斷點讓他停留

b main.main
Breakpoint 1 set at 0x10cbc7b for main.main() ./main.go:16

接下來就可以直接跑

c

===>

> main.main() ./main.go:16 (hits goroutine(1):1 total:1) (PC: 0x10cbc7b)
    11: type Person struct {
    12:         Id int `json:"id"`
    13:         Name string `json:"name"`
    14: 
    15: }
=>  16: func main() {
    17:         m := map[int8]int{
    18:                 1:1,
    19:                 2:2,
    20:                 3:3,
    21:         }
(dlv)

他就會跑到中斷點停住

這邊筆記一些常用的語法

s : 進入函數

si : 進入 runtime 函數

c : 開始

stepout : 跳出函數

n : 下一步

args : 查看 input 值

p : 印出變數

重頭戲

要進入這一段的底層函數需要進去 runtime 下中斷點的

v1 := m[3]

這邊要下 
b runtime.mapaccess1()

才能執行 si

因此如果不知道底層呼叫的函數是哪段,就無法進入

相關連結