如何在没有Visual Studio的情况下查看哪个线程在远程.NET应用程序中发生了疯狂

时间:2012-12-11 11:21:38

标签: .net debugging windows-7 .net-4.0 process

我需要知道.NET应用程序的哪个线程正在疯狂。它几乎消耗了整个CPU时间。

问题:

  • 应用程序在远程PC上运行
  • 我唯一可以通过RDP
  • 访问本机
  • 客户网站上没有可用的Visual Studio
  • 所以我无法通过远程调试连接
  • 但是,我可以将一些文件复制到机器并启动工具

我的问题:

  • 是否有可能“看到”(使用我可以复制到机器的标准工具或工具)
    • 哪个线程占用了所有CPU时间
    • 这个帖子调用了哪些方法?

在“其他操作系统”上,我可以创建一个实时调用堆栈或启动转储,以查看某个线程是否处于无限循环中。 Windows 7和Windows是否存在这种可能性? .NET?

环境:

  • Windows 7(x86)
  • .NET 4.0

致以最诚挚的问候和感谢

4 个答案:

答案 0 :(得分:2)

是的,这是可能的。
如果进程是在x86 OS上运行的x86进程或x64 OS上的x64,则只需要Process explorer

  1. 打开流氓应用程序的属性
  2. 切换到“主题”标签
  3. 按“CPU”排序
  4. 选择CPU使用率较高的线程,然后单击“Stack”。您现在应该看到该线程的托管堆栈。有关详细信息,请参阅this blog post

  5. 如果该过程在x64操作系统上是x86,则会涉及更多内容。如果您需要此信息,请发表评论。

答案 1 :(得分:2)

我们使用Sam's standalone CPU analyzer来查看CPU以查看它正在做什么,生成文本文件。如果您有任何疑虑,此代码为released as OSS yesterday

答案 2 :(得分:0)

您不需要安装visual studio来使用远程调试器,因为它可作为独立工具使用。你可以:

  • 要求使用防火墙例外以允许使用远程调试器'正常'
  • 使用PuTTy + freeSSHd之类的东西在远程机器和你的机器之间设置反向隧道,然后在隧道上使用远程调试器。

您还可以使用进程资源管理器来查看哪个线程占用了所有CPU时间,但这只会给您一个相对无用的线程句柄,而不是告诉您任何用处。

您可以做的另一件事是将物理机转换为VM映像,并在本地引导该VM映像进行测试。

答案 3 :(得分:0)

您可以使用(已安装的)perfmon.exe工具来监控每个线程的CPU利用率。

您可能还希望应用程序创建一个日志文件,该文件将某种线程名称与您创建的每个线程相关联,以便您知道哪个线程是哪个。