文章目錄
WinDBG 出現 SOS does not support the current target architecture ?!
前幾天 production server 上的出現 CPU high 的 warning,當下立馬想到使用 WinDBG 來追查問題發生原因,只是我使用 WinDBG 的頻率不高,每次在使用前都要再花一些時間查語法,幸虧黑大日前的文章 - WinDBG 應用實例:找出 ASP.NET CPU 100% 原因 列舉幾個常用的 WinDBG 語法,讓使用 WinDBG 時的前置時間縮短不少,可以更有效率地專注在追查問題原因
以往使用 WinDBG 時都還算順利,但這次卻出現 SOS does not support the current target architecture
的狀況,讓追查動作無法繼續下去,所以立馬來紀錄一下這次使用 WinDBG 的經驗
操作流程
下載並安裝 WinDBG
開啟 WinDBG
- 有
32 位元
及64 位元
版本差異 預設安裝位置在
C:\Program Files (x86)\Windows Kits\10\Debuggers\
資料夾下
- 有
匯入 dump file (
.dmp
)主選單
File
–>Open Crash Dump...
依黑大文章 執行相關指令(以下指令內容節錄黑大文章內容)
.sympath srv*D:\Symbol*https://msdl.microsoft.com/download/symbols
分析過程需要 Symbol 檔,指定 WinDbg 自動由微軟網站下載,並 Cache 在 D:\Symbol 目錄避免重複下載
!sym noisy
指定顯示完整 Symbol 下載資訊
.cordll -ve -u -l
自動載入 CLR 偵錯相關模組
用 64 位元 windbg 開 32 位元 dump file 就會出現找不到 dll 的錯誤
Unable to load DLL mscordacwks_AMD64_x86_4.0.30319.18449.dll, Win32 error 0n87
!runaway
依使用 CPU 時間將 thread 排序
~{thread id}s
切換至指定 thread
如使用不正確的 WinDBG 版本 (32⁄64 位元) 開啟 .dump 會出現
wow64cpu!CpupSyscallStub+0x2:
!clrstack
列出該 thread 的 callstack
執行 !clrstack
時出現錯誤訊息
錯誤訊息內容
SOS does not support the current target architecture.
錯誤訊息截圖
問題發生原因及解決方式
32 位元程式未使用 32 位元 task manager 匯出 dump file
- 32 位元 task manager 位於
C:\Windows\SysWOW64\Taskmgrexe
- 開啟後名稱為:
Task Manager (32 bit)
- 同時僅能開啟一個 task manager,如已開啟 64 bit task manager 需先關閉才能開啟 32 bit task manager
- 32 位元 task manager 位於
IIS - Application Pools 可以強制設定為 32 位元
這就是我這次遇到狀況的實際源頭,現在多數 server 都是 64 位元,預設 IIS 也是使用 64 位元模式執行,但如果程式本身使用到僅支援 32 位元元件(ex. Oracle.DataAccess.x86) 就必需強制啟用 32 位元模式
- IIS - Application Pools –> {Name} –> Advanced Settings
- Enable 32-Bit Applications
心得
一開始想不通為什麼明明是 64-bit server 怎麼會出現 WinDBG 版本錯誤的訊息(wow64cpu!CpupSyscallStub+0x2
) 而需要使用 x86 WinDBG 開啟,持續深入偵錯才又發現新的錯誤:SOS does not support the current target architecture.
才知道原來需要使用 32-bit task manager 匯出 dump file,經過一些實驗後終於證實是 application pool 設定的結果
經過這一連串的 debug 過程對於 WinDBG 的使用與指令都有更深的印象,非常感謝黑大文章 - WinDBG 應用實例:找出 ASP.NET CPU 100% 原因 幫了很大的忙,希望下次使用可以更得心應手
參考資訊
文章作者 Yowko Tsai
上次更新 2021-10-08
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。