Golangでdelveが実戦で常駐プロセスが停止した問題を分析
3314 ワード
概要:
Delveの目的は,開発者がGDBデバッグで遭遇する様々な問題を解決することである.
1.まずインストール
取得する前に、GOPATHが設定されていることを確認してください.Go 1.8以降、GOPATHはユーザーディレクトリのgoフォルダにデフォルト設定されています
参照先:https://github.com/go-delve/delve/blob/master/Documentation/installation/linux/install.md
2.問題のある常駐プロセスdurationのpidを見つけ、attach
3.goroutinesコマンドでプログラム内のgoroutineを表示する
出力からmainの関数呼び出しチェーンが
main.main => lib.SaveDurationToAdb => lib.(*Rds).GetWorkReading => redis.(*Pool).Get
呼び出しチェーントレースコードから /home/www/go/pkg/mod/github.com/gomodule/[email protected]+incompatible/redis/pool.go:278
Delveの目的は,開発者がGDBデバッグで遭遇する様々な問題を解決することである.
1.まずインストール
取得する前に、GOPATHが設定されていることを確認してください.Go 1.8以降、GOPATHはユーザーディレクトリのgoフォルダにデフォルト設定されています
go get -u github.com/go-delve/delve/cmd/dlv
参照先:https://github.com/go-delve/delve/blob/master/Documentation/installation/linux/install.md
2.問題のある常駐プロセスdurationのpidを見つけ、attach
[www@test3 gogin]$ pidof duration
18824
[www@test3 gogin]$ dlv attach 18824
Type 'help' for list of commands.
(dlv)
3.goroutinesコマンドでプログラム内のgoroutineを表示する
(dlv) goroutine
Thread 18824 at /usr/local/go/src/runtime/sys_linux_amd64.s:536
Goroutine 1:
Runtime: /usr/local/go/src/runtime/proc.go:305 runtime.gopark (0x431150)
User: /home/www/go/pkg/mod/github.com/gomodule/[email protected]+incompatible/redis/pool.go:278 github.com/gomodule/redigo/redis.(*Pool).get (0x835585)
Go: /usr/local/go/src/runtime/asm_amd64.s:220 runtime.rt0_go (0x45a3a4)
Start: /usr/local/go/src/runtime/proc.go:113 runtime.main (0x430b60)
(dlv) goroutine 1
Switched from 0 to 1 (thread 18824)
(dlv) bt
0 0x0000000000431150 in runtime.gopark
at /usr/local/go/src/runtime/proc.go:305
1 0x0000000000407828 in runtime.goparkunlock
at /usr/local/go/src/runtime/proc.go:310
2 0x0000000000407828 in runtime.chanrecv
at /usr/local/go/src/runtime/chan.go:524
3 0x00000000004074eb in runtime.chanrecv1
at /usr/local/go/src/runtime/chan.go:406
4 0x0000000000835585 in github.com/gomodule/redigo/redis.(*Pool).get
at /home/www/go/pkg/mod/github.com/gomodule/[email protected]+incompatible/redis/pool.go:278
5 0x00000000008345b7 in github.com/gomodule/redigo/redis.(*Pool).Get
at /home/www/go/pkg/mod/github.com/gomodule/[email protected]+incompatible/redis/pool.go:179
6 0x0000000000a17f0f in gogin/console/alisls/lib.(*Rds).GetWorkReading
at ./console/alisls/lib/redis.go:82
7 0x0000000000a1874d in gogin/console/alisls/lib.SaveDurationToAdb
at ./console/alisls/lib/redis.go:115
8 0x0000000000a1aa02 in main.main
at ./console/alisls/duration.go:6
9 0x0000000000430d7e in runtime.main
at /usr/local/go/src/runtime/proc.go:203
10 0x000000000045c571 in runtime.goexit
at /usr/local/go/src/runtime/asm_amd64.s:1357
出力からmainの関数呼び出しチェーンが
main.main => lib.SaveDurationToAdb => lib.(*Rds).GetWorkReading => redis.(*Pool).Get
呼び出しチェーントレースコードから /home/www/go/pkg/mod/github.com/gomodule/[email protected]+incompatible/redis/pool.go:278
, , ,
args
break
breakpoints
clear
clearall
condition
continue
disassemble
exit debugger
frame
funcs
goroutine goroutine
goroutines goroutines
help
list
locals
next
on
print
regs CPU
restart
set
source delve
sources
stack
step
step-instruction cpu
thread
threads
trace
types
vars ( )