什么是delve
delve是golang推荐的专门go语言调试工具,用来替代gdb,因为:golang组织说delve能更好的理解go语言。
delve的安装,delve的github地址:https://github.com/derekparker/delve
#拉取源码
go get -u github.com/derekparker/delve/cmd/dlv
#切换到安装位置,安装路径一般在$GOMODCACHE们可以通过go env查看
cd /www/wwwroot/Golang/pkg/mod/github.com/derekparker/delve@v1.4.0/cmd/dlv
#安装dlv命令行
go build
go install
3.delve常用命令行
attach到进程PID
$ dlv attach <pid> Type 'help' for list of commands. (dlv) help
打印所有的goroutines列表
(dlv) goroutines [10 goroutines] Goroutine 1 - User: /usr/local/go/src/syscall/asm_linux_amd64.s:27 syscall.Syscall (0x466e70) (thread 14023) Goroutine 2 - User: /usr/local/go/src/runtime/proc.go:292 runtime.gopark (0x42800a) Goroutine 3 - User: /usr/local/go/src/runtime/proc.go:292 runtime.gopark (0x42800a) Goroutine 17 - User: /usr/local/go/src/runtime/proc.go:292 runtime.gopark (0x42800a) Goroutine 18 - User: /usr/local/go/src/runtime/sigqueue.go:139 os/signal.signal_recv (0x43b5b6) Goroutine 19 - User: /usr/local/go/src/runtime/proc.go:292 runtime.gopark (0x42800a) Goroutine 20 - User: ./main.go:43 main.setupSignalHandler.func1 (0x49318c) Goroutine 21 - User: /usr/local/go/src/runtime/time.go:102 time.Sleep (0x442ac6) Goroutine 22 - User: /usr/local/go/src/runtime/time.go:102 time.Sleep (0x442ac6) Goroutine 23 - User: /usr/local/go/src/runtime/lock_futex.go:227 runtime.notetsleepg (0x40c9a2)
打印单个goroutine的stack
(dlv) goroutine <goroutine_id> stack 0 0x0000000000466e70 in syscall.Syscall at /usr/local/go/src/syscall/asm_linux_amd64.s:27 1 0x000000000046692f in syscall.read at /usr/local/go/src/syscall/zsyscall_linux_amd64.go:749 2 0x0000000000466449 in syscall.Read at /usr/local/go/src/syscall/syscall_unix.go:162 3 0x0000000000468798 in internal/poll.(*FD).Read at /usr/local/go/src/internal/poll/fd_unix.go:153 4 0x0000000000469b8e in os.(*File).read at /usr/local/go/src/os/file_unix.go:226 5 0x0000000000468f7a in os.(*File).Read at /usr/local/go/src/os/file.go:107 6 0x00000000004658a6 in io.ReadAtLeast at /usr/local/go/src/io/io.go:309 7 0x0000000000465a18 in io.ReadFull at /usr/local/go/src/io/io.go:327 ...
打印所有goroutine的stack
(dlv) goroutines -t [10 goroutines] Goroutine 1 - User: /usr/local/go/src/syscall/asm_linux_amd64.s:27 syscall.Syscall (0x466e70) (thread 14023) 0 0x0000000000466e70 in syscall.Syscall at /usr/local/go/src/syscall/asm_linux_amd64.s:27 1 0x000000000046692f in syscall.read at /usr/local/go/src/syscall/zsyscall_linux_amd64.go:749 2 0x0000000000466449 in syscall.Read at /usr/local/go/src/syscall/syscall_unix.go:162 ... (truncated) Goroutine 2 - User: /usr/local/go/src/runtime/proc.go:292 runtime.gopark (0x42800a) 0 0x000000000042800a in runtime.gopark at /usr/local/go/src/runtime/proc.go:292 1 0x00000000004280be in runtime.goparkunlock at /usr/local/go/src/runtime/proc.go:297 2 0x0000000000427e4c in runtime.forcegchelper at /usr/local/go/src/runtime/proc.go:248 3 0x0000000000451671 in runtime.goexit at /usr/local/go/src/runtime/asm_amd64.s:2361 ...
等等等。。。,不列了,用到的时候再去查文档就行
无论从事什么行业,只要做好两件事就够了,一个是你的专业、一个是你的人品,专业决定了你的存在,人品决定了你的人脉,剩下的就是坚持,用善良專業和真诚赢取更多的信任。