使用AD+處理崩潰和掛起(2) (轉)
更多細節
沒有符號的情況:namespace prefix = o ns = "urn:schemas--com::office" />
在沒有安裝除錯符號的情況下,我們執行ADPlus.vbs,看看有什麼結果。
執行下列命令,它將導致對info.exe和其他Out-Of-Process ()應用的Full-Memory Dumps:
cscript.exe adplus.vbs -hang -iis
CScript將會輸出:
Microsoft (R) Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
以及一個對話方塊提示你安裝除錯符號:
對話方塊上建議您安裝好除錯符號後,新建一個環境變數“_NT_SYMBOL_PATH”儲存除錯符號的安裝路徑。
然後,讓我們繼續:
The '-hang' switch was used, Autdoump is running in 'hang' mode.
Dum process info for 5.x and all COM+ server applications
except for the System application.
----------------------------------------------------------------------
Dumping process: IIS (INETINFO.EXE)
(Process ID: 1140)
最後有一個對話方塊報告日誌存放地點:
這時候,預設在Deging Tools For Windows安裝路徑下新建了一個目錄,它的名字類似於這樣“Normal_Hang_Mode__Date_10-28-2002__Time_21-25-1919”。下面是Dump的內容:
MemoryDump
PID-792__INETINFO.EXE__full_2002-10-28_21-25-25-750_0318.dmp,
和相應的說明PID-792__INETINFO.EXE__Date_10-28-2002__Time_21-25-1919.log。
說明檔案中會依次給出以下資訊:
µ Autodump+啟動的時間
µ 操作資訊
µ 執行名
µ 堆疊資訊
µ 控制程式碼資訊
µ 執行緒堆疊遍歷資訊
µ 載入的模組資訊
µ DLL資訊
µ 關鍵段資訊
µ 執行緒使用情況資訊
這是肉眼看得懂的。至於高達十幾MB的DMP檔案,只有讓WinG來解釋了。
啟動Windbg,按Ctrl+D,將出現選擇“Open crash Dump”檔案對話方塊,選中上面的PID-792__INETINFO.EXE__full_2002-10-28_21-25-25-750_0318.dmp。當出現對話方塊詢問是否儲存Workspace Information時,選擇Yes。之後Windbg將會出現兩個視窗“Disembly”和“Command”。這裡我們不需要“Disassembly”視窗,關掉它。
“Command”視窗將會告訴你,當Dump進行時,Active Thread在做什麼。
由於我們沒有安裝除錯符號,所以只能遺憾地看到:
Symbol search path is: *** Invalid *** : Verify _NT_SYMBOL_PATH setting
Executable search path is:
..................................................................
Wake debugger - code 80000007 (!!! second chance !!!)
eax=00000001 ebx=00000000 ecx=0027aa80 edx=00000000 esi=00000000 edi=00000068
eip=77f8fb68 esp=0006f8a0 ebp=0006f910 iopl=0 nv up ei pl zr na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntdll.dll -
ntdll!NtReadFile+b:
77f8fb68 c22400 ret 0x24
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ADV32.dll
這時,輸入命令“kb”,這是召喚執行緒堆疊資訊的符咒。你可以檢視Windbg幫助,那裡寫得很明白:KB(Display Stack Backtrace),B就是顯示傳入每一個的前三個引數。輸出如下所示:
0:000> kb
ChildEBP RetAddr Args to Child
WARNING: Stack unwind information not available. Following frames may be wrong.
0006f910 77da86d3 00000068 0006f9d8 00000216 ntdll!NtReadFile+0xb
0006f93c 77da9431 00000068 0006f9d8 00000216 ADVAPI32!SetSecurityDescriptorSacl+0x4c
0006f9b8 77d929f7 00000068 0006f9d8 00000216 ADVAPI32!StartServiceCtrlDispatcherW+0x34d
0006fbf4 01002884 00279390 010040c8 00000000 ADVAPI32!StartServiceCtrlDispatcherA+0x72
0006fd30 01001e94 002d7f98 00000024 0006ffc0info+0x2884
77dfdbee 2474ff50 2474ff0c fb93e80c 55c3ffff inetinfo+0x1e94
0c24448d 00000000 00000000 00000000 00000000 0x2474ff50
上面的輸出可以大致分為三列內容:
- ChildEBP (列1)
- RetAddr (列2)
- Args to Child (列3~ 5)
其他可以盡情練習的命令有:
Ø ~*kb: ~*代表對於所有的執行緒應用後面的kb動作
Ø !locks : show all critical sections (這樣你就可以看到掛起時哪一個執行緒在等待了)
Ø lm -- List Modules loaded in the Process dump
Ø dc -- Dump address
這幾個命令都是重點推薦的,不可不試!
安裝除錯符號的情況
以上介紹的是沒有安裝除錯符號的情況,我們來看一看安裝了之後有什麼不同。
首先,安裝除錯符號。
其次,最好新建一個環境變數:
重新開啟Windbg。
這次Windbg載入了Dmp檔案之後,就會報告找到了除錯符號:
Symbol search path is: D:NTSymbols
Executable search path is:
............................................
Wake debugger - code 80000007 (!!! second chance !!!)
eax=00000004 ebx=00000000 ecx=00000000 edx=00000000 esi=00000000 edi=0000006c
eip=77f82861 esp=0006f8a0 ebp=0006f910 iopl=0 nv up ei pl zr na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246
*** WARNING: symbols timestamp is wrong 0x3af357eb 0x38175b30 for ntdll.dll
ntdll!_output+567:
77f82861 c22400 ret 0x24
*** WARNING: symbols timestamp is wrong 0x3c1aab1e 0x385134fe for ADVAPI32.dll
我們來比較一下“~*kb”命令在兩種情況下的區別:
沒有安裝除錯符號情況下:
4 id: 420.484 Suspend: 1 Teb 7ffda000 Unfrozen
*** ERROR: Symbol file could not be found. Defaulted to export symbols for RPCRT4.DLL -
ChildEBP RetAddr Args to Child
WARNING: Stack unwind information not available. Following frames may be wrong.
0119ff74 77d375ec 77d37a82 00280068 00270000 ntdll!ZwReplyWaitReceivePortEx+0xb
0119ffa8 77d379a0 0027b898 0119ffec 77e76523 RPCRT4!RpcBindingSetOption+0x6e9
0119ffb4 77e76523 0028f788 00270000 50000161 RPCRT4!RpcBindingSetOption+0xa9d
0119ffec 00000000 77d37988 0028f788 00000000 KERNEL32!TlsSetValue+0x115
安裝了除錯符號:
4 id: 420.484 Suspend: 1 Teb 7ffda000 Unfrozen
ChildEBP RetAddr Args to Child
0119ff74 77d375ec 77d37a82 00280068 00270000 ntdll!memmove+0x14
0119ffa8 77d379a0 0027b898 0119ffec 77e76523 RPCRT4!LOADABLE_TRANSPORT::LOADABLE_TRANSPORT+0x97
0119ffb4 77e76523 0028f788 00270000 50000161 RPCRT4!ReadSeed+0x11
0119ffec 00000000 77d37988 0028f788 00000000 KERNEL32!CreateThread+0x13
也就是說,警告你沒有除錯符號的情況下,可能會被一個錯誤的堆疊誤導。很明顯,兩種情況下堆疊展開的也不一樣。所以我們強烈建議您安裝除錯符號。
處理崩潰的觸發
能夠自動處理Crash情況,也是AD+讓人激賞的功能之一。你可以ADPlus,讓它一直執行,當發生異常時,選擇幾種方式處理:用信使服務通知管理員,或者自動Dump memory。
它能監視的異常有:
- Invalid Handle
- Illegal Instruction
- Integer Div by Zero
- Floating Point Divide by Zero
- Integer Overflow
- Invalid Lock Sequence
- Access Violation
- Stack Overflow
- C++ EH Exception
- Unknown Exception
這也是一個管理員早就希望擁有的功能了吧。
總結一下,大致的使用步驟是:
u 安裝的除錯符號
u 安裝Windows2000 SP1的除錯符號
u 安裝Windows2000 SP2的除錯符號
u 新建環境變數“_NT_SYMBOL_PATH”
u 安裝Microsoft Debugging Tools for Windows最新版本
u 當IIS Hang時,執行指令碼cscript.exe adplus.vbs -hang -iis
u 用Windbg載入dmp檔案,運用各種命令組合觀察。
值得注意的是,AD+已經被擴充套件,而不僅僅限於拯救IIS和COM+,一般的應用和服務也完全支援。
Written by zhengyun@tomosoft.com
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-996963/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用AD+處理崩潰和掛起 (轉)
- zookeeper叢集崩潰處理
- Android中處理崩潰異常Android
- VC++ 崩潰處理以及列印呼叫堆疊C++
- Android進階;App的異常崩潰處理AndroidAPP
- WkWebView 令人崩潰的崩潰WebView
- 「Go框架」gin框架是如何做崩潰處理的?Go框架
- 儲存崩潰導致資料丟失如何處理
- 聲網崩潰資料的自動化閉環處理
- win10 360瀏覽器崩潰如何解決_win10開啟360瀏覽器就崩潰處理方法Win10瀏覽器
- WKWebView崩潰WebView
- Redis崩潰Redis
- OGG複製程式掛起abended處理
- WIN10 1909瀏覽器總崩潰和卡死如何修復_WIN10 1909瀏覽器老是崩潰卡死處理方法Win10瀏覽器
- 電腦崩潰和當機原因分析總結大全(轉)
- Crittercism:KitKat崩潰率0.7% iOS 7.1崩潰率1.6%iOS
- Linux崩潰恢復工具--CRK(轉)Linux
- APP防崩潰APP
- 一次資料庫崩潰處理事件資料庫事件
- WWDC 2018:理解崩潰以及崩潰日誌
- sqlldr標準輸出未處理導致批處理掛起問題SQL
- 使用 Kdump 檢查 Linux 核心崩潰Linux
- Web站點崩潰的原因總結(轉)Web
- iOS Crash不崩潰iOS
- linux mint 崩潰Linux
- ios 崩潰集錦iOS
- app 崩潰的原因APP
- (轉)機器學習:偏差處理(2)機器學習
- 歸檔日誌滿導致的資料庫掛起故障處理【轉載】資料庫
- Windows下Qt使用dump定位崩潰位置(1)WindowsQT
- 執行緒崩潰為什麼不會導致 JVM 崩潰執行緒JVM
- 原位升級 拯救Windows XP崩潰的稻草(轉)Windows
- sqlsever處理資料庫的恢復掛起狀態SQL資料庫
- IOS 崩潰日誌分析iOS
- Invalid double崩潰分析
- TestBird 崩潰分析(Artisan) Android SDK 使用指南Android
- 使用RecyclerView的兩個非傳統型崩潰View
- 一起看下MySQL的崩潰恢復到底是怎麼回事MySql