
在我的 Windows 7 系統上,我每天都會遇到應用程式凍結的情況,一天幾次,已經持續幾天了。這個系統已經穩定運作了 4 年,所以新的事情正在發生。
主要症狀是 Thunderbird 在啟動時死機,並且變得無法使用。我曾以為這是 Thunderbird 的問題,最終創建了一個新的配置文件,因為我的配置文件已經有 10 多年的歷史了。
為什麼我想到了個人檔案?因為我發現.msf
如果不重新啟動就無法刪除某些檔案。嘗試這樣做會凍結資源管理器,必須重新啟動。
使用新的設定檔後,Thunderbird 繼續凍結,但頻率降低,因此我能夠閱讀郵件並快速回覆。
昨天我正在.hmtl
使用 gvim 編輯一個文件,同時將其載入到 Firefox 中查看結果。
工作一個小時後,又結冰了。任何試圖操作該.hmtl
檔案的進程都被凍結。殺死 Firefox 和 gvim 並沒有幫助。
使用行程資源管理器(未以管理員身分啟動)無法.hmtl
透過其句柄搜尋功能顯示該檔案。 Handle.exe 也不能。重新啟動會解鎖未損壞的檔案。我有chkdsk /B
兩個裝置(C:
一個是 SSD,D:
一個是 HDD),因為.msf
檔案已打開D:
,並且.hmtl
已開啟C:
。
我懷疑Windows搜索,並清除了它的資料庫。
我嘗試停用 Windows 搜尋、防毒軟體 (Avast) 以及作為服務運行的兩個同步/備份工具。
沒有釋放任何鎖。
我發現了這個有趣的windbg用途:Windows 中的掛起進程:有什麼方法可以了解原因嗎?
我已經附加了 Thunderbird 進程,目前處於凍結狀態,現在我看到了:
FAULTING_IP:
ntdll!DbgBreakPoint+0
00000000`7772cc90 cc int 3
EXCEPTION_RECORD: ffffffffffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 000000007772cc90 (ntdll!DbgBreakPoint)
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 1
Parameter[0]: 0000000000000000
FAULTING_THREAD: 0000000000000000
BUGCHECK_STR: HANG
PROCESS_NAME: thunderbird.exe
ERROR_CODE: (NTSTATUS) 0xcfffffff - <Unable to get error code text>
EXCEPTION_CODE: (NTSTATUS) 0xcfffffff - <Unable to get error code text>
EXCEPTION_PARAMETER1: 0000000000000000
NTGLOBALFLAG: 0
APPLICATION_VERIFIER_FLAGS: 0
DERIVED_WAIT_CHAIN:
Dl Eid Cid WaitType
-- --- ------- --------------------------
56 74c.1a04 Speculated (Triage) -->
0 74c.12b4 File IO
WAIT_CHAIN_COMMAND: ~56s;k;;~0s;k;;
BLOCKING_THREAD: 00000000000012b4
DEFAULT_BUCKET_ID: APPLICATION_HANG_BlockedOn_FileIO
PRIMARY_PROBLEM_CLASS: APPLICATION_HANG_BlockedOn_FileIO
LAST_CONTROL_TRANSFER: from 00000000751dc1ff to 000000007772df0a
STACK_TEXT:
00000000`0024ddd8 00000000`751dc1ff : 00000000`003becdc 00000000`003becf4 00000000`005847e0
000000ba`00340201 : ntdll!ZwCreateFile+0xa
00000000`0024dde0 00000000`751cd18f : 00000000`003becdc 00000000`00000000 00000000`00000000
00000000`00000060 : wow64!whNtCreateFile+0x10f
00000000`0024deb0 00000000`75152776 : 00000000`77360745 00000000`751c0023 00000000`00000246
00000000`003bf2f8 : wow64!Wow64SystemServiceEx+0xd7
00000000`0024e770 00000000`751cd286 : 00000000`00000000 00000000`75151920 ffffffff`fc5f0000
00000000`7770dfc1 : wow64cpu!TurboDispatchJumpAddressEnd+0x2d
00000000`0024e830 00000000`751cc69e : 00000000`00000000 00000000`00000000 00000000`751c4b10
00000000`7ffe0030 : wow64!RunCpuSimulation+0xa
00000000`0024e880 00000000`777216a6 : 00000000`00584330 00000000`00000000 00000000`7780e670
00000000`777e1950 : wow64!Wow64LdrpInitialize+0x42a
00000000`0024edd0 00000000`7777d150 : 00000000`00000000 00000000`77720db1 00000000`0024f380
00000000`00000000 : ntdll!LdrpInitializeProcess+0x17e3
00000000`0024f2c0 00000000`7770b63e : 00000000`0024f380 00000000`00000000 00000000`fffdf000
00000000`00000000 : ntdll! ?? ::FNODOBFM::`string'+0x25b20
00000000`0024f330 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000
00000000`00000000 : ntdll!LdrInitializeThunk+0xe
FOLLOWUP_IP:
wow64!whNtCreateFile+10f
00000000`751dc1ff 448bd8 mov r11d,eax
SYMBOL_STACK_INDEX: 1
SYMBOL_NAME: wow64!whNtCreateFile+10f
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: wow64
IMAGE_NAME: wow64.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 562593aa
STACK_COMMAND: ~0s ; kb
BUCKET_ID: X64_HANG_wow64!whNtCreateFile+10f
FAILURE_BUCKET_ID: APPLICATION_HANG_BlockedOn_FileIO_cfffffff_wow64.dll!whNtCreateFile
WATSON_STAGEONE_URL: http://watson.microsoft.com/0004cc90.htm?Retriage=1
Followup: MachineOwner
---------
所以,好吧,我非常確信 Thunderbird 阻塞了 IO,現在,這一點得到了證實。根據 API 文檔,此呼叫可以是開啟現有文件。我嘗試轉儲給出文件名的參數(據我所知),使用此命令隨機播放:“dt ntdll!_OBJECT_ATTRIBUTES 00000000`005847e0”,但我不熟悉windbg和調用約定,所以到目前為止我失敗了深入研究結構。
那接下來我能做什麼呢?
編輯:
按照建議將我的 WinDbg 更改為 x86 版本後,我的轉儲變得可分析。
凍結消失了,當你專注於一個問題時,它總是會發生:它會短暫消失以避免被解決,直到今晚,佳能 DPP 在批量處理 RAW 文件期間凍結。
這是跟踪:
FAULTING_IP:
ntdll!DbgBreakPoint+0
7736000c cc int 3
EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 7736000c (ntdll!DbgBreakPoint)
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 1
Parameter[0]: 00000000
FAULTING_THREAD: 00000000
BUGCHECK_STR: HANG
PROCESS_NAME: DPPBatch.exe
ERROR_CODE: (NTSTATUS) 0xcfffffff - <Unable to get error code text>
EXCEPTION_CODE: (NTSTATUS) 0xcfffffff - <Unable to get error code text>
EXCEPTION_PARAMETER1: 00000000
MOD_LIST: <ANALYSIS/>
NTGLOBALFLAG: 0
APPLICATION_VERIFIER_FLAGS: 0
DERIVED_WAIT_CHAIN:
Dl Eid Cid WaitType
-- --- ------- --------------------------
1 1b88.1ff4 Speculated (Triage) -->
0 1b88.1948 File IO
WAIT_CHAIN_COMMAND: ~1s;k;;~0s;k;;
BLOCKING_THREAD: 00001948
DEFAULT_BUCKET_ID: APPLICATION_HANG_BlockedOn_FileIO
PRIMARY_PROBLEM_CLASS: APPLICATION_HANG_BlockedOn_FileIO
LAST_CONTROL_TRANSFER: from 74e8c5fd to 77370106
STACK_TEXT:
0018ed8c 74e8c5fd 0018ee28 80100080 0018edcc ntdll!ZwCreateFile+0x12
0018ee30 76e53f56 00000060 80100080 00000001 KERNELBASE!CreateFileW+0x35e
0018ee5c 76e553b4 0058e300 80000000 00000001 kernel32!CreateFileWImplementation+0x69
0018ee8c 100dbf8e 01f4ed98 80000000 00000001 kernel32!CreateFileA+0x37
WARNING: Stack unwind information not available. Following frames may be wrong.
0018eeb8 10002275 01f40000 00000000 10002294 DPPDLL!GNZ_getFilenameFromScriptFile+0x3e
0018eef8 0018ef7c 01f4ed98 00000000 0018ef7c DPPDLL!UCSCloseProfile+0xea5
0018eefc 01f4ed98 00000000 0018ef7c 01f4fc20 0x18ef7c
0018ef7c 00000000 00000000 00000000 00000000 0x1f4ed98
FOLLOWUP_IP:
DPPDLL!GNZ_getFilenameFromScriptFile+3e
100dbf8e 8bf8 mov edi,eax
SYMBOL_STACK_INDEX: 4
SYMBOL_NAME: dppdll!GNZ_getFilenameFromScriptFile+3e
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: DPPDLL
IMAGE_NAME: DPPDLL.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 52251a6c
STACK_COMMAND: ~0s ; kb
BUCKET_ID: HANG_dppdll!GNZ_getFilenameFromScriptFile+3e
FAILURE_BUCKET_ID: APPLICATION_HANG_BlockedOn_FileIO_cfffffff_DPPDLL.dll!GNZ_getFilenameFromScriptFile
WATSON_STAGEONE_URL: http://watson.microsoft.com/0001000c.htm?Retriage=1
Followup: MachineOwner
---------
我輕鬆地在 D: 驅動器上找到了相應的文件:D:\Sauvegarde\Tirages\photos\20151214 - totale D70\\GNZC0E116282C365.vbf
。工作2小時後進程掛起。我此時正在使用PC。它看起來肯定像是檔案系統損壞或裝置驅動程式錯誤,所以我將再次運行 chkdsk。
同時,我嘗試啟動 ProcessExplorer 來尋找等待檔案的進程 IO,它成功了。但我記得它應該以管理員身份啟動,所以我關閉它並右鍵單擊圖標......大約花了 5 分鐘才彈出(我沒想到它會彈出,這讓我感到驚訝)。再次,根據 Process Explorer,沒有句柄與阻塞文件關聯(我查找了“vbf”)。
好吧,我認為我關於調試器的問題已經得到解答(存在 2 個版本的 WinDbg),並且我的問題仍然需要解決,但我不確定這是獲得幫助的正確位置。