在用户计算机上查看.NET可执行文件的循环位置

时间:2012-04-30 14:04:59

标签: .net remote-debugging

当我的应用程序在我的开发PC上进入长循环或无限循环时,我在VS调试器中打破它,告诉我它正在做什么。我也希望在用户PC上以简单的方式做到这一点,以帮助调试。

我在想这样的事情:

  • 在应用程序中,运行一个单独的线程,等待某种进程间管道,并在收到任何内容后,记录主线程的当前堆栈跟踪。 (使用Thread.GetCompressedStack()?)
  • 运送帮助程序exe,例如break.exe,当运行时,连接到另一个进程并将一些内容写入管道。

然后,如果用户报告应用程序冻结,我可以告诉他们尝试运行break.exe。

这是一个好方法吗?

2 个答案:

答案 0 :(得分:1)

你有几个选择。

  • 任务管理器允许您创建任何正在运行的进程的转储。可以在您的开发机器上检查转储。您可以通过将转储加载到调试器中来检查所有线程的堆栈(我建议使用WinDbg / SOS)。此选项不需要在用户计算机上进行任何其他安装。

  • Process Explorer允许您检查正在运行的进程的线程。如果你有一个重复循环,你可以通过查看堆栈来检测它。

  • WinDbg(SOS是框架的一部分)可以将xcopy部署到用户计算机。您可以附加到流程并检查或转储流程内存。

答案 1 :(得分:0)

您可以使用Debug.WriteLine输出调试信息。调试输出的文本可以用例如Sysinternals'DbgView

或者,您可以为用户进行特殊的调试构建,这会将所有必要的信息转储到用户的%APPDATA%文件中。