Golangでdelveが実戦で常駐プロセスが停止した問題を分析

3314 ワード

概要:
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	       (  )