如何在golang中退出之前设置断点

时间:2017-10-20 07:59:32

标签: debugging go gdb breakpoints exit

我是golang的初学者,实际上我正在调试别人的程序,以找出意外退出的原因。

我想知道如何在"退出" gdb中设置断点。在程序关闭之前调用的例程?

我到目前为止已经尝试了

gdb <program name>
run
<...wait for program to quit>
break 'runtime.goexit'
run
<...wait for program to break>

但它不会破裂,而只是退出。

2 个答案:

答案 0 :(得分:0)

如果您有权访问源代码,则可以添加defer来处理从任意点退出,例如:

https://play.golang.org/p/uliAc3j7f-

package main

import (
    "fmt"
)

func main() {
    defer func() {
        fmt.Println("Place breakpoint here")    
        if recovered := recover(); recovered != nil {
            fmt.Println("Handled panic:", recovered)    
        }
    }()
    fmt.Println("Hello, playground")
    panic("Something went wrong")
}

Go也区分大小写,请尝试break 'runtime.Goexit' - 请参阅https://golang.org/pkg/runtime/#Goexit

答案 1 :(得分:0)

  

但它不会破裂,而只是退出。

如果您愿意,可以使用catch syscall exit(或catch sycall exit_group  在Linux上。)

如果程序真的存在(而不是被信号终止),那么可以保证停止程序。