2014-07-19 51 views
1

我的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張貼在上面。從herehere,我學會了如何嘗試找到句柄,但我有一些障礙: 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 

但是,也沒找到句柄。

有人可以幫助我嗎? 在此先感謝!

+0

我還發現[DebugDiag 2.1](http://www.microsoft.com/en-us/download/details.aspx?id=42933)在分析死鎖方面非常好。可能比手動在WinDbg中做更容易。 –

+1

1)kb命令顯示前三個參數。但我看到四個參數被空間分割。在x64中你不能依賴這個前四個參數通過寄存器傳遞你正在看的東西可能是無關緊要的,除非參數被保存到堆棧中的家園空間(通過在編譯時使用/ homeparams開關) – blabb

+0

@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

回答

1

length顯然不能是000000000d67b0f8,這太多了。你也在看錯功能。我不知道KERNELBASE!WaitForMultipleObjectsEx的參數是什麼或者它使用什麼調用約定,它不是公共API。您需要查看下面的行,該行是指致電kernel32!WaitForMultipleObjectsExImplementation。它的參數看起來更像是WaitForMultipleObjectsEx的參數:第一個參數length是1,這是合理的,下一個是指向句柄數組的指針,其餘爲零。因此,您似乎需要在地址000000000763d720處轉儲第一個HANDLE,即ULONG_PTR

相關問題