65.9K
CodeProject 正在变化。 阅读更多。
Home

在 VC 调试器的线程列表中命名您的线程

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.27/5 (19投票s)

2004年10月13日

viewsIcon

93148

VC 调试器为每个线程显示一个名称。本文档描述了如何控制 VC 在线程列表中显示的内容。

Sample Image - Name_threads_in_debugger.png

引言

几天前,有人问我是否可以重命名 VC 调试器中的线程。由于我那时正从事一个多线程项目,我对实现这个想法非常感兴趣。在 Google 群组中搜索了一番后,我找到了一种简单易行的解决方案。由于这对于所有从事多线程应用程序开发的人来说都可能很有帮助,因此我在这里分享它。

理解的关键在于,VC 调试器通过异常 #0x406D1388 获取线程名称信息。

我将必要的调用放入了一个简单的函数。以下是代码:

//
// Usage: SetThreadName (-1, "MainThread");
//
typedef struct tagTHREADNAME_INFO
{
  DWORD dwType; // must be 0x1000
  LPCSTR szName; // pointer to name (in user addr space)
  DWORD dwThreadID; // thread ID (-1=caller thread)
  DWORD dwFlags; // reserved for future use, must be zero
} THREADNAME_INFO;

void SetThreadName( DWORD dwThreadID, LPCSTR szThreadName)
{
  THREADNAME_INFO info;
  {
    info.dwType = 0x1000;
    info.szName = szThreadName;
    info.dwThreadID = dwThreadID;
    info.dwFlags = 0;
  }
  __try
  {
    RaiseException( 0x406D1388, 0, sizeof(info)/sizeof(DWORD), (DWORD*)&info );
  }
  __except (EXCEPTION_CONTINUE_EXECUTION)
  {
  }
}

你只需要使用线程 ID 和一个名称字符串作为参数来调用 SetThreadName() 即可。

祝你使用这个小工具愉快! ;)

© . All rights reserved.