delve调试运行时go程序

环境和代码参考gdb调试篇

delve是go官方推荐的一个调试器,由go语言开发,也被很多代码编辑器集成为debug的插件,比如goland,vscode
官方文档戳这里

程序例子

环境和代码参考gdb调试篇

delve安装

delve安装参考环境安装篇

调试go运行时程序

  • 启动程序
    go run test.gogo build -o test test.go
  • 调试程序
    • 连接运行时程序
      dlv attach `ps aux|grep test|grep -v "grep"|awk  '{print $2}'`
      
    • 查看当前进程所有线程信息(即MPG中的M)
      (dlv) threads
      * Thread 130 at 0x45f0a3 .usr/local/go/src/runtime/sys_linux_amd64.s:536 runtime.futex
      ......
          Thread 136 at 0x45f250 .usr/local/go/src/runtime/sys_linux_amd64.s:675 runtime.epollwait
      
    • 切换线程
      (dlv) thread 135
      Switched from 130 to 135
      
    • 查看当前线程栈详细信息
      (dlv) stack
      0  0x000000000045f0a3 in runtime.futex at .usr/local/go/src/runtime/sys_linux_amd64.s:536
         ......
      7  0x0000000000401893 in ??? at ?:-1
      
    • 查看当前线程运行栈中的某一个函数信息
      (dlv) frame 1
      > runtime.futex() .usr/local/go/src/runtime/sys_linux_amd64.s:536 (PC: 0x45f0a3)
      Warning: debugging optimized function
      Frame 1: .usr/local/go/src/runtime/os_linux.go:63 (PC: 42c4b2)
      58:           ts.set_nsec(int32(ns % 1000000000))
      59:       } else {
      60:           ts.tv_nsec = 0
      61:           ts.set_sec(int64(timediv(ns, 1000000000, (*int32)(unsafe.Pointer(&ts.tv_nsec)))))
      62:       }
      =>  63:     futex(unsafe.Pointer(addr), _FUTEX_WAIT_PRIVATE, val, unsafe.Pointer(&ts), nil, 0)
      64:   }
      65:
      66:   // If any procs are sleeping on addr, wake up at most cnt.
      67:   //go:nosplit
      68:   func futexwakeup(addr *uint32, cnt uint32) {
      
    • 查看所有的协程
      (dlv) goroutines #或者grs
        Goroutine 1 - User: .root/go/src/github.com/saileifeng/go-socket-test/example/test/test.go:41 main.ShutDownHook (0x735829)
        Goroutine 2 - User: .usr/local/go/src/runtime/proc.go:302 runtime.gopark (0x43036f)
        Goroutine 3 - User: .usr/local/go/src/runtime/proc.go:302 runtime.gopark (0x43036f)
        Goroutine 4 - User: .usr/local/go/src/runtime/proc.go:302 runtime.gopark (0x43036f)
        Goroutine 6 - User: .usr/local/go/src/runtime/proc.go:302 runtime.gopark (0x43036f)
        Goroutine 18 - User: .usr/local/go/src/runtime/sigqueue.go:139 os/signal.signal_recv (0x44450c)
        Goroutine 19 - User: .usr/local/go/src/runtime/netpoll.go:182 internal/poll.runtime_pollWait (0x42b0a6)
        Goroutine 20 - User: .usr/local/go/src/runtime/sema.go:71 sync.runtime_SemacquireMutex (0x4402ad)
        Goroutine 21 - User: .usr/local/go/src/runtime/sema.go:71 sync.runtime_SemacquireMutex (0x4402ad)
        Goroutine 22 - User: .usr/local/go/src/runtime/sema.go:71 sync.runtime_SemacquireMutex (0x4402ad)
        Goroutine 23 - User: .usr/local/go/src/runtime/sema.go:71 sync.runtime_SemacquireMutex (0x4402ad)
        Goroutine 24 - User: .usr/local/go/src/runtime/sema.go:71 sync.runtime_SemacquireMutex (0x4402ad)
        Goroutine 25 - User: .usr/local/go/src/runtime/sema.go:71 sync.runtime_SemacquireMutex (0x4402ad)
        Goroutine 26 - User: .usr/local/go/src/runtime/sema.go:71 sync.runtime_SemacquireMutex (0x4402ad)
        Goroutine 27 - User: .usr/local/go/src/runtime/sema.go:71 sync.runtime_SemacquireMutex (0x4402ad)
        Goroutine 28 - User: .usr/local/go/src/runtime/sema.go:71 sync.runtime_SemacquireMutex (0x4402ad)
        Goroutine 29 - User: .usr/local/go/src/runtime/sema.go:71 sync.runtime_SemacquireMutex (0x4402ad)
        Goroutine 30 - User: .usr/local/go/src/runtime/proc.go:302 runtime.gopark (0x43036f)
        Goroutine 31 - User: .usr/local/go/src/runtime/proc.go:302 runtime.gopark (0x43036f)
      [19 goroutines]
      
    • 切换协程
      (dlv) goroutine 1   #或者gr 1
      Switched from 0 to 1 (thread 131) #可以看到当前协程是在131线程上被运行
      
    • 查看协程栈信息
      (dlv) goroutine 1 stack #或者直接stack
      0  0x000000000043036f in runtime.gopark
         at .usr/local/go/src/runtime/proc.go:302
      1  0x00000000004075a0 in runtime.goparkunlock
         at .usr/local/go/src/runtime/proc.go:307
      2  0x00000000004075a0 in runtime.chanrecv
         at .usr/local/go/src/runtime/chan.go:524
      3  0x000000000040727b in runtime.chanrecv1
         at .usr/local/go/src/runtime/chan.go:406
      4  0x0000000000735829 in main.ShutDownHook
         at .root/go/src/github.com/saileifeng/go-socket-test/example/test/test.go:41
      5  0x0000000000735747 in main.main
         at .root/go/src/github.com/saileifeng/go-socket-test/example/test/test.go:34
      6  0x000000000042ff7c in runtime.main
         at .usr/local/go/src/runtime/proc.go:200
      7  0x000000000045d241 in runtime.goexit
         at .usr/local/go/src/runtime/asm_amd64.s:1337
      
    • 查看协程栈中运行的函数详细信息
      (dlv) gr 1 frame 4
      

待续......

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容