【问题标题】:How to list threads when debugging in Visual Studio Express 2010在 Visual Studio Express 2010 中调试时如何列出线程
【发布时间】:2013-01-05 16:08:30
【问题描述】:

我正在尝试找出我的 WPF 应用程序在调试时没有完全结束的原因。 “干净”是指所有窗口都已关闭,我可以在“输出”窗口中看到各种消息,显示应用程序已结束但进程仍处于活动状态,并且调试器中的“停止”按钮仍处于活动状态。

我调用了Shutdown() 方法,但有些东西阻止了应用程序结束。我很确定这与与 IO 设备的以太网连接有关,但看不到我做错了什么。 (当我注释掉连接设备的调用时,应用程序可以干净地退出)

我想知道 VSE 2010 是否可以列出所有活动线程,因为这可能会为在主程序结束后仍然“活动”的线程提供线索。或者有什么外部工具可以帮助到这里?

【问题讨论】:

    标签: multithreading visual-studio-2010 visual-studio-debugging visual-studio-express


    【解决方案1】:

    您应该能够使用Visual Studio Threads window 查看哪些线程仍处于活动状态。我不完全确定这个窗口在 Express 版本中是否可用(文档没有提到这样的限制),但如果你没有它,那么你也可以use WinDbg to list all threads。 WinDbg 是the debugging tools for Windows 的一部分。您可能需要安装最新版本的 Windows SDK 才能获得它。

    【讨论】:

    • 无法打开Threads 窗口 - 该项目是灰色的。猜猜这是 Express 限制
    • 那么 WinDbg 就是要走的路。
    【解决方案2】:

    首先使用调试器。 Debug + Break All, Debug + Windows + Threads 看看哪些线程还在运行。您可以双击一个并使用 Debug + Windows + Call Stack 来查看它在做什么。典型的情况是您启动但忘记告诉终止的线程。 Thread.IsBackground 属性是一种让 CLR 为您自动中止线程的方法。

    从技术上讲,阻止进程关闭的设备可能存在问题。 Threads 窗口通常只显示一个线程,该线程具有其他无法穿透的堆栈跟踪。如果您使用任务管理器,进程选项卡,查看 + 选择列,勾选句柄,那么您可能会看到只有一个句柄仍在使用中。然后诊断是您的机器上有一个糟糕的设备驱动程序,它不能正确支持 I/O 取消。这可能会使内核线程运行而不会退出,从而阻止进程终止。很不寻常,先看看第一段给出的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 2011-10-12
      • 2013-09-23
      相关资源
      最近更新 更多