我的asp.net應用程序被吊死了。所以我抓了一個轉儲文件。我發佈了一個問題here。 現在在這篇新文章中,我想找出鎖柄。如何從KERNELBASE的函數中獲取句柄!WaitForMultipleObjectsEx使用windbg調試時
0:177> kb 5
RetAddr : Args to Child : Call Site
000007fe`fda11430 : 00000001`012f8bb8 00000000`00000000 000007fe`f1651000 000007fe`f1f00d1f : ntdll!NtWaitForMultipleObjects+0xa
00000000`77851723 : 00000000`0d67b0f8 00000000`0d67b0f0 00000000`00000000 00000000`0d67af50 : KERNELBASE!WaitForMultipleObjectsEx+0xe8
000007fe`fa2f0f15 : 00000000`00000000 00000000`00000000 00000000`0763d720 00000000`00000001 : kernel32!WaitForMultipleObjectsExImplementation+0xb3
000007fe`fa2f0cee : 00000000`00000001 00000000`0763d8e8 00000000`00000001 00000000`0763d8e8 : clr!WaitForMultipleObjectsEx_SO_TOLERANT+0x91
000007fe`fa2f0b79 : 00000000`00000000 00000000`0d67b2c9 00000000`0763d720 00000000`0d67b4c8 : clr!Thread::DoAppropriateAptStateWait+0x56
stacktrace張貼在上面。從here和here,我學會了如何嘗試找到句柄,但我有一些障礙: 1)kb命令顯示前三個參數。但我看到四個參數被空間分割。
00000000`0d67b0f8 00000000`0d67b0f0 00000000`00000000 00000000`0d67af50
我搞砸了,不知道哪個參數是句柄,哪個參數代表句柄長度。
支持句柄爲00000000 0d67b0f0, and the length is 00000000
0d67b0f8。如果我輸入
dd 00000000`0d67b0f0 L?00000000`0d67b0f8
這個輸出顯示句柄地址嗎? 我試圖輸入命令,但輸出太長了。我找不到處理地址。 我試過
dd 00000000`0d67b0f0 L1
但是,也沒找到句柄。
有人可以幫助我嗎? 在此先感謝!
我還發現[DebugDiag 2.1](http://www.microsoft.com/en-us/download/details.aspx?id=42933)在分析死鎖方面非常好。可能比手動在WinDbg中做更容易。 –
blabb
在x64中你不能依賴這個前四個參數通過寄存器傳遞你正在看的東西可能是無關緊要的,除非參數被保存到堆棧中的家園空間(通過在編譯時使用/ homeparams開關) –@ThomasW。謝謝你的帖子。我使用DebugDiag2.1來分析死鎖,但沒有檢測到死鎖。我還發布了另一個問題來尋求答案。這個問題是關於「[鏈接](http://stackoverflow.com/questions/24596550/will-net-parallel-tasks-exhaust-all-the-threads-in-the-pool-and-cause-deadlock ):.net Parallel Tasks會耗盡池中的所有線程並導致死鎖,應用程序被掛起,傳入的請求無法被處理?「 – gfan