go - 如何调试用golang编写的死锁进程

标签 go

我有一个用 golang 编写的进程作为守护进程运行。

几天后,它会无缘无故地停止输出。我认为这可能是一个内部僵局。如果我做 strace -p <PID>我能看到线

futex(0x9aaba0, FUTEX_WAIT, 0, NULL

显然那个电话永远不会结束。我想使用已经运行的进程(因为我不知道如何/何时再次触发错误)来调试问题。

我如何查看正在运行的 goroutine 以及它们在哪里?我如何从进程中转储可能对调试问题有用的任何其他信息?

最佳答案

您可以向任何 go 程序发送一个 QUIT 信号,它会以完整的堆栈跟踪退出,显示所有 goroutine 的状态,以及它们是如何被阻塞的。

对于strace,go程序都是多线程的,所以总是需要加上-f选项

关于go - 如何调试用golang编写的死锁进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28691474/

相关文章:

go - 如何理解这个错误? “unsupported destination, should be slice or struct”

go - ioutil.TempFile 和 umask

golang "goinstall"命令丢失

使用 mkdir : permission denied 去安装错误

go - Switch case 语句落空为 default

go - 为什么这两个实现不同?

go - 可以让 channel 保持打开状态吗?

string - 使用 reflect.StringHeader 将字节转换为字符串仍然分配新内存?

mongodb - Go:创建 io.Writer 接口(interface)用于记录到 mongodb 数据库

go - 是否可以使用 Go net/rpc 检查元数据?