簡體   English   中英

轉儲關鍵節隊列(線程正在等待)

[英]Dump Critical Section Queue (Threads waiting)

我有一個問題(崩潰轉儲),我的關鍵部分被破壞了,但是在檢查LockCount之后,我注意到有1個線程在等待它(似乎該線程已被喚醒,但尚未進入,因為鎖定狀態為Not已鎖定)。

我想看看什么線程被喚醒。 我知道關鍵部分有一個等待線程的隊列,如果我可以轉儲此隊列/列表結構,我應該可以回答我的問題,關於我能做什么的任何想法?

CriticalSection對象定義為

typedef RTL_CRITICAL_SECTION CRITICAL_SECTION;

RTL_CRITICAL_SECTION定義為

typedef struct _RTL_CRITICAL_SECTION {
    PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
    LONG LockCount;
    LONG RecursionCount;
    HANDLE OwningThread;        // from the thread's ClientId->UniqueThread
    HANDLE LockSemaphore;
    ULONG_PTR SpinCount;        // force size on 64-bit systems when packed
} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;

OwningThread將包含擁有線程的句柄。 因此,您可以只讀取CriticalSection數據結構來獲取擁有線程的句柄。

DWORD WINAPI GetThreadId(_In_ HANDLE OwningThread);

將返回擁有線程的ID。

但是,OwningThread的定義有一個小麻煩。 MSDN報告該字段實際上包含線程ID本身。

您可以使用

GetThreadInformation(OwningThread,....);

獲取更多線程詳細信息。

在這種情況下, 必須閱讀 Windows上MSDN上關鍵部分中的代碼死鎖 格外的EntryCount/ContentionCount領域RTL_CRITICAL_SECTION_DEBUG結構可能會給出一個答案,這里的問題。

您嘗試過!鎖嗎? 這里有有關在WinDBG文檔中查看過程中關鍵部分的信息:

http://msdn.microsoft.com/zh-CN/library/windows/hardware/ff541979(v=vs.85).aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM