与 Process Explorer 的 TID 对应的 System.Threading.Thread 的属性/属性/字段是啥?
Posted
技术标签:
【中文标题】与 Process Explorer 的 TID 对应的 System.Threading.Thread 的属性/属性/字段是啥?【英文标题】:What's the attribute/property/field of a System.Threading.Thread which corresponds with Process Explorer's TID?与 Process Explorer 的 TID 对应的 System.Threading.Thread 的属性/属性/字段是什么? 【发布时间】:2021-12-01 18:52:34 【问题描述】:我目前正在尝试查看我在 C# 应用程序中创建的线程发生了什么。该线程的类型为System.Threading.Thread
,并嵌入到一个内部对象中(在调试时我可以访问该对象中的线程)。
我正在检查应用程序,使用“Process Explorer”。 Process Explorer 有一个“线程”选项卡,其中包含“TID”、“CPU”、“周期增量”、“暂停计数”和“起始地址”列。 为了识别我已经启动的线程(在调试器中),我相信我可以查找 TID(线程 ID)或起始地址,我认为线程 ID 是最清晰的。
但是,乍一看,我在 System.Threading.Thread
类中看不到任何看起来像线程 ID 的属性/字段/属性。
有人知道System.Threading.Thread
的哪个属性/属性/字段对应于Process Explorer 的TID 列吗?
编辑:似乎有一个ManagedThreadId
,但不是这样。
【问题讨论】:
github.com/dotnet/coreclr/blob/master/Documentation/botr/… @TheGeneral:从您的评论中我看到托管线程和本机线程之间存在差异,因此 Process Explorer 只查看本机线程并且我正在创建一个托管线程,我不应该使用用于此目的的流程资源管理器。你能告诉我可以使用哪个工具来验证我的线程是否仍在运行? 线程窗口是否没有为您提供 Visual Studio 中所需的信息? docs.microsoft.com/en-us/visualstudio/debugger/… @TheGeneral:是的,确实如此。抱歉,我不知道 Visual Studio 中存在“线程”窗口。感谢您的帮助。 【参考方案1】:基本上,托管线程不是本机线程,在任务管理器中寻找相关性并不合适。欲了解更多信息,请参阅CLR Threading Overview - Managed vs. Native Threads
托管代码在“托管线程”上执行,这些线程不同于 操作系统提供的本机线程。本机线程 是在物理机器上执行本机代码的线程;一种 托管线程是在 CLR 的 virtual 上执行的虚拟线程 机器。
...
但是,如果您使用的是 Visual Studio,则可以使用 线程窗口 来调试托管线程。
View threads in the Visual Studio debugger by using the Threads window (C#, Visual Basic, C++)
几个 Visual Studio 用户界面元素可帮助您进行调试 多线程应用程序。本文介绍多线程调试 代码编辑器窗口、调试位置工具栏和 线程窗口
Walkthrough: Debug a multithreaded app using the Threads window (C#, Visual Basic, C++
Visual Studio 提供了多种工具和用户界面元素 帮助您调试多线程应用程序。本教程展示了如何 使用线程标记、Parallel Stacks 窗口、Parallel Watch 窗口、条件断点和过滤断点。完成 本教程将使您熟悉 Visual Studio 的功能 调试多线程应用程序。
【讨论】:
以上是关于与 Process Explorer 的 TID 对应的 System.Threading.Thread 的属性/属性/字段是啥?的主要内容,如果未能解决你的问题,请参考以下文章
process explorer和process monitor有啥不同
使用 Process.Start 打开资源管理器窗口会创建过多的 explorer.exe 进程