得到所有线程的堆栈跟踪

时间:2011-05-03 06:55:00

标签: c#

我想在c#application(UI)中记录所有线程的堆栈跟踪。我可以使用WinDbg使用以下命令获取所有托管线程的堆栈跟踪。

.loadby sos mscorwks
〜* e!clrstack

有没有其他简单的方法来获取我的c#应用程序中所有线程的callstack?这是因为我想在客户机器上运行应用程序并且客户不是技术人员时获取callstack

请帮帮我。

谢谢!

2 个答案:

答案 0 :(得分:1)

这是一个建议尝试使用Adplus + WinDbg或DebugDiag获取应用程序的用户转储。并使用userdump进行事后调试

Here's a good article关于在进程崩溃时自动捕获用户转储

好读 Tess Fernandez's blog on msdn

http://debuggingblog.com/wp/2008/10/31/beginner-guide-to-windbg-part-1/

答案 1 :(得分:1)

是的,如果您将Windbg部署到客户机器,然后使用WMemoryProfiler执行调试器命令,也可以在实时进程中执行此操作。这听起来很奇怪,但你可以自动调试自己。

请参阅here

private static void SelfDebug()
{
    using (var debugger = new MdbEng())
    {
        string[] output = debugger.Execute("~*e!ClrStack");
        Console.WriteLine(String.Join(Environment.NewLine, output));
    }
}