我是golang的初学者,实际上我正在调试别人的程序,以找出意外退出的原因。
我想知道如何在"退出" gdb
中设置断点。在程序关闭之前调用的例程?
我到目前为止已经尝试了
gdb <program name>
run
<...wait for program to quit>
break 'runtime.goexit'
run
<...wait for program to break>
但它不会破裂,而只是退出。
答案 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上。)
如果程序真的存在(而不是被信号终止),那么可以保证停止程序。