【问题标题】:How does Visual Studio's Thread Window Identify the "Main Thread'Visual Studio 的线程窗口如何识别“主线程”
【发布时间】:2011-06-20 22:47:33
【问题描述】:

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

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

直到今天我才真正考虑过它,但是当查看 Visual Studio 中的线程窗口时(在分配任何线程名称之前等),分配了一个特殊类别“主线程”以及一个伪名称读取“主线程”(但这不是实际的线程名称)。

从托管的角度来看,.NET 不会在 System.Threading.ThreadSystem.Diagnostics.ProcessThread 上公开任何有意义的东西来标识应用程序的主线程(至少我可以看到)。我查看了Windows Process and Thread Functions 的列表,再一次,我没有看到任何明显的东西(也许是 OpenThread?)。

想知道是否有人知道“线程”窗口如何分配特殊类别“主线程”?

【问题讨论】:

    标签: .net visual-studio multithreading debugging


    【解决方案1】:

    调试器使用 DEBUG_PROCESS 选项使用 CreateProcess 开始调试。主线程的句柄在 PROCESS_INFORMATION.hThread 中返回,因此无需猜测。附加有点棘手,大概是它在使用 DebugActiveProcess() 附加后从 WaitForDebugEvent 看到的第一个 CREATE_THREAD_DEBUG_EVENT 通知。

    如果您想仔细查看,可以使用 MDbg 的 source code

    【讨论】:

    • 啊,有道理;谢谢(你的)信息。源代码绝对很有趣。
    • CREATE_THREAD_DEBUG_EVENT 通知是异步的。我不确定交货顺序是否得到保证。不过,CreateProcess 返回的信息是有道理的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多