如何在windows上强制转储Go程序?

如何在windows上强制转储Go程序?,go,deadlock,dump,Go,Deadlock,Dump,我希望在windows上进行某种调试,其中服务的状态似乎是死锁。也许方法是进行转储。如何对Go服务进行程序转储?然后分析转储?我已经使用函数完成了这项工作。它的输出相当于从panic()获得的结果,但不会停止程序。您可以设置一个信号处理程序将堆栈转储到文件/stdout,或者启动一个goroutine以定期转储堆栈(如果愿意) 您还可以查看该软件包。使用trace命令可以很好地处理Goroutine死锁分析 首先,您需要获取数据来运行跟踪,这是您在任何时候都需要的。您可以通过使用pprof包或t

我希望在windows上进行某种调试,其中服务的状态似乎是死锁。也许方法是进行转储。如何对Go服务进行程序转储?然后分析转储?

我已经使用函数完成了这项工作。它的输出相当于从panic()获得的结果,但不会停止程序。您可以设置一个信号处理程序将堆栈转储到文件/stdout,或者启动一个goroutine以定期转储堆栈(如果愿意)


您还可以查看该软件包。

使用
trace
命令可以很好地处理Goroutine死锁分析

首先,您需要获取数据来运行跟踪,这是您在任何时候都需要的。您可以通过使用
pprof
包或
trace
包来实现这一点

pprof
包将其HTTP处理程序添加到web服务器,并允许您在应用程序运行时收集跟踪数据,而
trace
包允许您将跟踪写入流(例如文件),但我自己还没有尝试过

收集跟踪数据后,可以对收集的数据运行
trace
命令,以生成状态的web视图:

这里有一个示例输出:


你说的“垃圾场”是什么意思?你想要堆栈跟踪还是核心文件?我相信是核心文件。我想我需要整个州来解决僵局问题。stacktrace可能取决于我创建stacktrace的时间。核心文件也取决于创建它时的状态。一个快速的谷歌指向。堆栈跟踪是显示每个goroutine被阻止的位置的更简单的方法。