是否有一个windows实用程序将. net进程的所有运行线程的当前堆栈跟踪列表到纯文本文件中

本文关键字:跟踪 堆栈 列表 文件 文本 运行 实用程序 windows 有一个 net 进程 | 更新日期: 2023-09-27 18:18:52

背景:
我们有一个正在运行的。net服务应用程序,我们希望能够生成一个"堆栈跟踪转储"文本文件,这样我们就可以在纯文本文件中看到当前运行的线程和它们的堆栈跟踪。第一个想法是枚举应用程序中所有正在运行的线程,获取它们的堆栈跟踪,然后从应用程序中打印出来。然而,似乎没有支持的方法来做到这一点(你不能枚举应用程序中的线程,你不能获得堆栈跟踪信息,即使你知道线程)。此外,如果应用程序挂起,该方法将无法工作,因为我们无法向它发出信号来创建这个"文本转储"。

是否有一个实用程序(或一组可以通过批处理文件执行的实用程序)来生成一个纯文本文件,在那里我可以看到在。net应用程序/进程中运行的所有线程的所有堆栈跟踪?
当然,它应该能够读取。pdb文件并打印真正的方法名。

我已经看到有实用程序附加到进程并生成标准转储文件,但我不知道如何使用该转储文件在文本文件中获得用户友好的堆栈跟踪

是否有一个windows实用程序将. net进程的所有运行线程的当前堆栈跟踪列表到纯文本文件中

procdump -> cdbg (WinDbg命令行版本)。

当然,你需要加载SOS扩展来获取关于。net线程的信息。有很多繁重的工作要做,所以不要惊讶它并不完全容易——但是SOS几乎隐藏了所有这些。只要SOS在线,只要运行!EEStack,你就完成了:)

如果您需要更多的细节,!CLRStack命令可以给您更多(包括方法参数和局部变量-只有那些没有优化的,没有名字,但是嘿:)),但是它必须为每个线程手动运行。这可以用~*e!clrstack来完成。

你需要安装Windows SDK (WinDbg+Cdbg), ProcDump是一个免费的(不支持的)实用程序。您需要进行完整的进程转储—minidump没有足够的信息让SOS完成它的工作,因此在您的服务器上执行dump->转换可能是实用的。

你可能需要一段时间才能找到你的方向——毕竟,WinDbg是一个内核调试器,它的设计带有非常内核色彩的眼镜。不过,它几乎可以让你做任何事情。如果您喜欢冒险,您甚至可以完全跳过Procdump步骤,直接连接到您的进程,从而节省宝贵的时间:)