【问题标题】:How do I determine which are the foreground .NET threads from WinDBG?如何确定哪些是来自 WinDBG 的前台 .NET 线程?
【发布时间】:2009-04-28 11:22:38
【问题描述】:

如何确定哪些是来自 WinDBG 的前台 .NET 线程? 使用 !threads 命令,SOS 扩展告诉我们前台线程的数量,但不告诉我们是哪些。

【问题讨论】:

    标签: windbg


    【解决方案1】:

    !threads 输出中的状态标志包含大量信息。如果设置了0x00000200 标志,则线程是后台线程。

    在 .NET 4 和 PSSCOR2 的 SOS 中,有一个 !threadstate 命令,它将列出给定标志值的文本。如果您没有这些,可以查看转子源代码和 John Robbins 调试 .NET 2.0 应用程序中的标志的概述。

    【讨论】:

    • 非常感谢!很高兴看到 SOS 扩展中的所有线程状态标志。
    【解决方案2】:

    您可以使用link 中给出的线程状态值来确定线程是否为后台线程。

    TS_Background 0x00000200 线程是一个 后台线程

    【讨论】:

      【解决方案3】:

      Netext 的命令!wthreads 显示类型和状态信息:

      0:011> !wthreads
         Id OSId Address  Domain   Alloc Start:End   COM  GC Type  Locks Type / Status             Last Exception
          1 1854 0074f580 00748cd0 02c19308:02c1b2e8 STA  Preemptive   0                          
          2 1890 0075ab18 00748cd0 00000000:00000000 MTA  Preemptive   0 Background|Finalizer     
          3 1bac 080ecb98 00748cd0 00000000:00000000 MTA  Preemptive   0 Background|Worker        
          4 ---- 08106068 00748cd0 00000000:00000000 MTA  Preemptive   0 Worker|Terminated        
          5 ---- 0810e988 00748cd0 00000000:00000000 MTA  Preemptive   0 Worker|Terminated        
          6 ---- 080eb1d0 00748cd0 00000000:00000000 MTA  Preemptive   0 Worker|Terminated        
          7 081c 080fcb48 00748cd0 00000000:00000000 MTA  Preemptive   0 Background|IOCPort
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-25
        • 2010-09-25
        相关资源
        最近更新 更多