Visual Studio的线程窗口如何识别"主线程"

Chr*_*ter 7 .net debugging multithreading visual-studio

我可能会遗漏一些明显的东西,但幽默我......

我总是喜欢在我的应用程序中命名重要的线程,因为它对调试/日志记录等有用.如果Thread.CurrentThread.Name在程序启动时查询主线程的名称,您将返回null.因此,我始终确保首先发生的是主线程(以及任何其他相关线程)被分配一个有意义的名称以供将来参考.

直到今天我才真正考虑过它,但在查看Visual Studio中的Threads窗口时(在分配任何线程名称之前等),分配了一个特殊类别'Main Thread'以及一个也写为"Main"的伪名称线程"(但这不是实际的线程名称).

从管理角度看,.NET不会暴露在任任何有意义System.Threading.ThreadSystem.Diagnostics.ProcessThread标识应用程序的主线程(至少,我可以看到).我查看了Windows进程和线程函数列表,再次,我没有看到任何明显的东西(也许是OpenThread?).

好奇,如果有人知道线程窗口如何分配特殊类别"主线程"?

Han*_*ant 5

调试器使用DEBUG_PROCESS选项开始使用CreateProcess进行调试.主线程的句柄在PROCESS_INFORMATION.hThread中返回,所以没有猜测.附加有点棘手,可能是它在附加DebugActiveProcess()后从WaitForDebugEvent看到的第一个CREATE_THREAD_DEBUG_EVENT通知.

如果您想仔细查看,可以使用MDbg 的源代码.