具有分层输出的堆栈跟踪

时间:2017-09-30 07:33:13

标签: multithreading debugging go dump tee

我正在调试一个带有很多goroutine的go程序,似乎已经死锁。

我希望冻结时有一个堆栈跟踪。但输出很长,不适合我的终端缓冲区。所以我想把它输出到一个文件。但是,如果我将stderr输出到文件,我就不能(轻松)检测它何时冻结。

我预计tee对此有好处:

go test ./foo -v |& tee log.txt

但是,当我点击Ctrl + Alt + \时,终端或文件中都没有显示堆栈跟踪输出。不知何故,似乎它在tee之旅中无法生存。

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

根据Mark Plotnick的评论,在SIGQUIT之前捕获tee信号(至少对我而言):

go test ./foo -v |& { trap "" 3; tee log.txt; }