因此,根据Visual Studio,我应该在没有运行283个线程的应用程序中修复没有事件探查器的死锁(至少我没有找到任何有用的死锁)。大多数线程称为Thread _threadstartexThread _threadstartex
,这使得很难查看它们的所属对象。
因此,我决定第一步就是要找到线程的起始位置并为其设置一些名称,以便区分boost
和Qt
内部线程以及我们的应用程序线程。
因此,问题是(万一有人忘记了标题):如何找到在Visual Studio中启动的线程所在的FILE和LINE NUMBER?
最佳答案
几年前,我曾在Microsoft TechEd上学习到,当Visual Studio是调试器时,您可以设置线程名称。在程序中调用的代码是:
typedef struct tagTHREADNAME_INFO
{
DWORD dwType; // must be 0x1000
LPCSTR szName; // pointer to name (in user addr space), UTF-8
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;
#pragma warning(push)
#pragma warning(disable: 6312) // Possible infinite loop: use of the constant EXCEPTION_CONTINUE_EXECUTION in the exception-filter expression of a try-except. Execution restarts in the protected block
#pragma warning(disable: 6322) // Empty _except block
__try {
RaiseException(0x406D1388, 0, sizeof(info) / sizeof(ULONG_PTR), (ULONG_PTR*)&info);
}
__except (EXCEPTION_CONTINUE_EXECUTION) {
}
#pragma warning(pop)
}
参考:MSDN How to: Set a Thread Name in Native Code和How to: Set a Thread Name in Managed Code。
也许Visual Studio 2015具有一些更好的调试功能,可能对您有帮助? Microsoft已实现了许多增强功能,但是我不确定其中任何一项可以帮助您解决问题。
关于c++ - 查找线程在Visual Studio 2010 C++中从何处开始,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33302063/