共用方式為


.NET 調試程式延伸模組

.NET 調試程式延伸模組可讓您在即時進程和傾印上檢視在 .NET 運行時間內執行的程式碼相關信息。 擴充功能會預安裝 Windbg,而且可以 下載,以便與 LLDB 搭配使用。 您可以使用 .NET 調試程式延伸模組來:

  • 收集受控堆積的相關信息。
  • 尋找堆積損毀。
  • 顯示運行時間所使用的內部數據類型。
  • 檢視運行時間內執行之所有 Managed 程式代碼的相關信息。

.NET 調試程式延伸模組包含來自現有 dotnet-sos 工具和新命令的命令。 原生 AOT 運行時間現在也支援一組有限的命令。

語法

在windbg下: ![command] [options]

在 LLDB 下:sos [command] [options]

許多命令在 LLDB 下都有別名或快捷方式:clrstack [options]

命令

下表的命令也適用於 說明soshelp。 您可以使用 soshelp <command>取得個別命令說明。

命令 描述
bpmd [-nofuturemodule] [模組名稱方法名稱 ] [-md] -list-clear擱置斷點號碼-clearall 在指定模組的指定方法上建立斷點。

如果指定的模組和方法尚未載入,此命令會等候載入模組的通知,並在建立斷點之前先編譯 Just-In-Time (JIT)。

您可以使用 -list-clear-clearall 選項來管理暫止斷點清單:

-list 選項會產生所有暫止斷點的清單。 如果暫止斷點具有非零模組標識符,該斷點是該特定載入模組中函式特有的。 如果暫止斷點有零個模組標識符,該斷點會套用至尚未載入的模組。

使用 -clear-clearall 選項,從清單中移除擱置的斷點。
CLRStack [-a -a] [-l] [-p] [-n] [-f] [-r] [-all] 僅提供Managed程式代碼的堆疊追蹤。

-p 選項會顯示 Managed 函式的自變數。

-l 選項會顯示框架中局部變數的相關信息。 .NET 調試程式延伸模組無法擷取本機名稱,因此本機名稱的輸出格式 <本機位址>=<>。

-a 選項是結合 -l-p 的快捷方式。

-n 選項會停用來源檔名和行號的顯示。 如果調試程式有指定選項SYMOPT_LOAD_LINES,SOS 會查閱每個受管理框架的符號,如果成功,則會顯示對應的來源檔名和行號。 您可以指定 -n (沒有行號) 參數來停用此行為。

-f 選項 (完整模式) 會顯示原生畫面,這些畫面會與 Managed 畫面格和元件名稱和函式位移混在一起。 使用 dotnet-dump時,此選項不會顯示原生畫面。

-r 選項會傾印每個堆疊框架的緩存器。

-all 選項會傾印所有 Managed 線程的堆疊。
COMState 列出每個線程和 Context 指標的 COM Apartment 模型,如果有的話。 只有在 Windows 上才支援此命令。
DumpArray [-start<startIndex>] [-length<length>] [-details] [-nofields] <陣列物件地址>

-或-

DA [-start<startIndex>] [-length<length>] [-details] [-nofields] 數組物件地址>
檢查陣列物件的元素。

-start 選項會指定要顯示元素的起始索引。

長度 選項會指定要顯示的元素數目。

-details 選項會使用 DumpObjDumpVC 格式來顯示專案的詳細數據。

-nofields 選項可防止數位顯示。 只有在指定 -details 選項時,才能使用此選項。
DumpAsyncdumpasync) [-mt<MethodTable 位址>] [-type<部分類型名稱>] [-waiting] [-root] DumpAsync 會周遊垃圾收集的堆積,並尋找代表異步狀態機器的物件,如異步方法的狀態傳送至堆積時所建立。 此命令會辨識定義為 async voidasync Taskasync Task<T>async ValueTaskasync ValueTask<T>的異步狀態機器。

輸出包含每個找到異步狀態機器物件的詳細數據區塊。 這些詳細資料包括:
- 異步狀態機器物件的類型行,包括其 MethodTable 位址、其物件位址、大小,以及其類型名稱。
- 物件中包含的狀態機器類型名稱行。
- 狀態電腦上每個欄位的清單。
- 如果已註冊一或多個狀態機器物件的接續行。
- 探索到這個異步狀態機器物件的 GC 根目錄。

支援原生 AOT 應用程式。
DumpAssembly<元件地址> 顯示元件的相關信息。

DumpAssembly 命令會列出多個模組,如果有的話。

您可以使用 DumpDomain 命令來取得元件位址。
DumpClass<EEClass 位址> 顯示與類型相關聯之 EEClass 結構的相關信息。

DumpClass 命令會顯示靜態域值,但不會顯示非靜態域值。

使用 DumpMTDumpObjName2EEToken2EE 命令來取得 EEClass 結構位址。
DumpDomain [<網域位址>] 列舉在指定 AppDomain 物件位址內載入的每個 Assembly 物件。 在沒有參數的情況下呼叫時,DumpDomain 命令會列出進程中的所有 AppDomain 物件。 由於 .NET (Core) 只有一個 AppDomainDumpDomain 只會傳回一個 物件。
DumpHeap [-stat] [-strings] [-short] [-min<size>] [-max<size>] [-thinlock] [-startAtLowerBound] [-mt<MethodTable address>] [-type<部分類型名稱>] [start [end]] 顯示有關垃圾收集堆積和物件收集統計數據的資訊。

DumpHeap 命令會在偵測到垃圾收集行程堆積中過度分散時顯示警告。

-stat 選項會將輸出限制為統計類型摘要。

-strings 選項會將輸出限制為統計字串值摘要。

-short 選項只會將輸出限制為每個物件的位址。 此命令可讓您輕鬆地將命令的輸出傳送至另一個調試程式命令以進行自動化。

-min 選項會忽略小於以位元組為單位 size 參數的物件。

-max 選項會忽略大於以位元組為單位 size 參數的物件。

-thinlock 選項會報告 ThinLocks。 如需詳細資訊,請參閱 SyncBlk 命令。

-startAtLowerBound 選項會強制堆積逐步執行,以提供位址範圍的下限開始。 在規劃階段,堆積通常無法行走,因為物件正在移動。 此選項會強制 DumpHeap 在指定的下限處開始其逐步解說。 您必須提供有效對象的位址做為下限,這個選項才能運作。 您可以在錯誤的物件地址顯示記憶體,以手動尋找下一個方法數據表。 如果垃圾收集目前在呼叫 memcopy中,您也可以藉由將大小新增至開始位址來尋找下一個對象的位址,而起始位址會提供做為參數。

-mt 選項只會列出對應至指定之 MethodTable 結構的物件。

-type 選項只會列出類型名稱為指定字串之子字串相符的物件。

start 參數會從指定的地址開始列出。

end 參數會停止在指定位址的清單。

支援原生 AOT 應用程式。
DumpIL<Managed DynamicMethod 物件> |<DynamicMethodDesc 指標> |<MethodDesc 指標> 顯示與 Managed 方法相關聯的通用中繼語言 (CIL)。

動態 CIL 的發出方式與從元件載入的 CIL 不同。 動態 CIL 是指 Managed 物件陣列中的物件,而不是元數據令牌。
DumpLock [--allthreads] [--waits] 顯示 System.Threading.Lock 對象的相關信息,例如線程所持有的物件(預設值),或線程等候的物件。
DumpLog [-addr<addressOfStressLog>] [<Filename>] 將記憶體內部壓力記錄檔的內容寫入指定的檔案。 如果您未指定名稱,此命令會在目前目錄中建立名為 StressLog.txt 的檔案。

記憶體內部壓力記錄可協助您診斷壓力失敗,而不需使用鎖定或 I/O。 若要啟用壓力記錄檔,請在 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework] 底下設定下列登錄機碼:

(DWORD)StressLog = 1

(DWORD)LogFacility = 0xffffffff

(DWORD)StressLogSize = 65536

選擇性 -addr 選項可讓您指定預設記錄以外的壓力記錄檔。

支援原生 AOT 應用程式。
DumpMD<MethodDesc 位址> 顯示指定位址 MethodDesc 結構的相關信息。

您可以使用 IP2MD 命令,從 Managed 函式取得 MethodDesc 結構位址。
DumpMT [-MD] <MethodTable 位址> 顯示指定位址之方法數據表的相關信息。 指定 -MD 選項會顯示以 物件定義的所有方法清單。

每個 Managed 物件都包含方法數據表指標。
DumpModule [-mt] <模組位址> 顯示位於指定位址之模組的相關信息。 -mt 選項會顯示模組中定義的類型,以及模組所參考的類型

您可以使用 DumpDomainDumpAssembly 命令來擷取模組的位址。
DumpObj [-nofields] <物件位址>

-或-

DO<物件位址>
顯示指定位址上對象的相關信息。 DumpObj 命令會顯示欄位、EEClass 結構資訊、方法資料表和物件的大小。

您可以使用 DumpStackObjects 命令來擷取物件的位址。

您可以在類型 CLASS 的字段上執行 DumpObj 命令,因為它們也是物件。

- nofields 選項會防止顯示物件的欄位,它適用於 String 等物件。
DumpRuntimeTypes 顯示垃圾收集行程堆積中的運行時間類型對象,並列出其相關聯的類型名稱和方法數據表。
DumpStack [-EE] [-n] [top堆棧 [bottom堆棧]] 顯示堆疊追蹤。

-EE 選項會導致 DumpStack 命令只顯示 Managed 函式。 使用 topbottom 參數來限制 x86 平台上顯示的堆疊框架。

-n 選項會停用來源檔名和行號的顯示。 如果調試程式有指定選項SYMOPT_LOAD_LINES,SOS 會查閱每個受管理框架的符號,如果成功顯示對應的來源檔名和行號。 您可以指定 -n (沒有行號) 參數來停用此行為。
DumpSig<sigaddr><moduleaddr> 顯示指定位址 Sig 結構的相關信息。
DumpSigElem<sigaddr><moduleaddr> 顯示簽章物件的單一專案。 在大部分情況下,您應該使用 DumpSig 來查看個別簽章物件。 不過,如果簽章以某種方式損毀,您可以使用 DumpSigElem 來讀取其有效部分。
DumpStackObjects [-verify] [top堆棧 [bottom堆棧]]

-或-

DSO [-verify] [top堆棧 [bottom堆棧]]
顯示目前堆疊界限內找到的所有Managed物件。

-verify 選項會驗證物件欄位的每個非靜態 CLASS 字段。

使用 DumpStackObject 命令搭配堆棧追蹤命令,例如 K (windbg ) 或 bt 命令,以判斷局部變數和參數的值。
DumpVC<MethodTable 位址><位址> 顯示指定位址之實值類別欄位的相關信息。

MethodTable 參數可讓 DumpVC 命令正確解譯字段。 實值類別沒有方法數據表做為其第一個字段。
EEHeap [-gc] [-loader] 顯示內部運行時間數據結構所耗用之進程記憶體的相關信息。

-gc-loader 選項會將此命令的輸出限制為垃圾收集行程或載入器數據結構。

垃圾收集行程的資訊會列出Managed堆積中每個區段的範圍。 如果指標落在 -gc所指定的區段範圍內,則指標是對象指標。
EEStack [-short] [-EE] 在進程中的所有線程上執行 DumpStack 命令。

-EE 選項會直接傳遞至 DumpStack 命令。 -short 參數會將輸出限制為下列類型的線程:

已取得鎖定的線程。

為了允許垃圾收集而停止的線程。

目前在 Managed 程式代碼中的線程。
EHInfo [<MethodDesc address>] [<Code address>] 顯示指定方法中的例外狀況處理區塊。 此命令會顯示子句區塊的程式代碼位址和位移(try 區塊)和處理程式區塊(catch 區塊)。
常見問題 顯示常見問題。 dotnet-dump中不支援 。
FinalizeQueue [-detail] |[-allReady][-short] 顯示所有已註冊進行最終處理的物件。

-detail 選項會顯示需要清除之任何 SyncBlocks 的額外資訊,以及等候清除的任何 RuntimeCallableWrappers (RCWs) 。 這兩個數據結構會在執行時由完成項線程快取和清除。

[-allReady] 選項會顯示所有準備好進行最終處理的物件,不論它們是否已經由垃圾收集標示,或將由下一個垃圾收集標示。 「準備好完成」清單中的物件是不再根目錄的可完成物件。 這個選項可能很昂貴,因為它會驗證可完成佇列中的所有物件是否仍然根目錄。

-short 選項會將輸出限制為每個物件的位址。 如果與 -allReady搭配使用,則會列舉具有不再根目錄之完成項的所有物件。 如果單獨使用,它會列出可完成和「準備好完成」佇列中的所有物件。
FindAppDomain<物件位址> 決定位於指定位址之物件的應用程式域。
FindRoots-gen<N> |-gen any |<物件位址> 讓調試程式在指定之世代的下一個集合中中斷偵錯。 一旦中斷發生,效果就會重設。 若要中斷下一個集合,您必須重新發出 命令。 在發生 -gen-gen 所造成的中斷之後,會使用此命令的 對象位址 格式。 當時,偵錯組處於正確的狀態,FindRoots,以識別來自目前受譴責世代的物件根。 僅支援 Windows。
GCHandles [-perdomain] 顯示進程中垃圾收集行程句柄的相關統計數據。

-perdomain 選項會依應用程式域排列統計數據。

使用 GCHandles 命令來尋找垃圾收集行程所造成記憶體流失的處理程式流失。 例如,當程式代碼保留大型陣列時,就會發生記憶體流失,因為強式垃圾收集行程句柄仍然指向它,而且句柄會捨棄而不釋放它。

僅支援 Windows。
GCHandleLeaks 在記憶體中搜尋任何強式和固定垃圾收集行程句柄的參考,並顯示結果。 如果找到句柄,GCHandleLeaks 命令會顯示參考的位址。 如果在記憶體中找不到句柄,此命令會顯示通知。 僅支援 Windows。
GCInfo<MethodDesc 位址><程式代碼位址> 顯示數據,指出緩存器或堆疊位置何時包含 Managed 物件。 如果發生垃圾收集,收集行程必須知道對象參考的位置,才能使用新的物件指標值來更新它們。
GCRoot [-nostacks] [-all] <物件位址> 顯示指定位址物件之參考 (或 root) 的相關信息。

GCRoot 命令會檢查整個 Managed 堆積和句柄數據表,以取得堆疊上其他物件和句柄內的句柄。 接著會搜尋每個堆疊來尋找物件的指標,而且也會搜尋完成項佇列。

此命令不會判斷堆疊根目錄是否有效或已捨棄。 使用 clrstackU 命令來反組譯本機或自變數值所屬的框架,以判斷堆棧根目錄是否仍在使用中。

-nostacks 選項會將搜尋限制為垃圾收集行程句柄和可連線的物件。

-all 選項會強制顯示所有根目錄,而不只是唯一的根。
GCWhere<物件位址> 顯示傳入自變數之垃圾收集堆積中的位置和大小。 當自變數位於 Managed 堆積,但不是有效的物件位址時,大小會顯示為 0(零)。
說明soshelp) [<命令>] [faq] 未指定任何參數時顯示所有可用的命令,或顯示指定命令的詳細說明資訊。

faq 參數會顯示常見問題的解答。
HeapStat [-inclUnrooted | -iu] 顯示每個堆積的產生大小,以及每個堆積上每一代的總可用空間。 如果指定了 -inclUnrooted 選項,報表會包含不再根目錄之垃圾收集堆積中 Managed 物件的相關信息。 僅支援 Windows。
HistClear 釋放 Hist 命令系列所使用的任何資源。

一般而言,您不需要明確呼叫 HistClear,因為每個 HistInit 都會清除先前的資源。
HistInit 從儲存在偵錯專案中的壓力記錄檔,初始化 SOS 結構。
HistObj<obj_address> 檢查所有壓力記錄檔重新配置記錄,並顯示可能導致位址傳入做為自變數的垃圾收集重新配置鏈結。
HistObjFind<obj_address> 顯示參考指定位址之物件的所有記錄專案。
HistRoot<根> 顯示與指定根目錄之升階和重新配置相關的資訊。

根值可用來追蹤物件透過垃圾收集的移動。
IP2MDip2md) <代碼位址> 在已編譯 JIT 的程式代碼中,顯示位於指定位址的 MethodDesc 結構。
ListNearObjlno<obj_address> 顯示指定位址之前和之後的物件。 命令會尋找垃圾收集堆積中的位址,該堆積看起來像 Managed 物件的有效開頭(根據有效的方法數據表),以及自變數位址後面的物件。 僅支援 Windows。
MinidumpMode [0] [1] 使用迷你傾印時,防止執行不安全的命令。

傳遞 0 以停用此功能,或 1 啟用此功能。 根據預設,MinidumpMode 值會設定為 0

使用 .dump /m 命令或 .dump 命令所建立的 Minidumps 具有有限的 CLR 特定數據,並可讓您只正確執行 SOS 命令的子集。 某些命令可能會因未預期的錯誤而失敗,因為記憶體的必要區域未對應,或只是部分對應。 此選項可保護您免於執行不安全的命令,防止小型傾印。

僅支援Windbg。
Name2EEname2ee) <模組名稱><類型或方法名稱>

-或-

Name2EE<模組名稱><類型或方法名稱>
顯示指定模組中指定型別或方法的 MethodTable 結構和 EEClass 結構。

指定的模組必須在進程中載入。

若要取得適當的類型名稱,請使用 Ildasm.exe (IL 反組譯器)來瀏覽模組。 您也可以傳遞 * 作為模組名稱參數,以搜尋所有載入的受控模組。 模組名稱 參數也可以是模組的除錯程式名稱,例如 mscorlibimage00400000

此命令支援 <module>!<type>的 Windows 調試程式語法。 型別必須完整。
ObjSize [<物件位址>] |[-aggregate][-stat] 顯示指定物件的大小。 如果您未指定任何參數,ObjSize 命令會顯示 Managed 線程上找到的所有物件大小、顯示進程中的所有垃圾收集行程句柄,以及這些句柄指向的任何物件大小總計。 ObjSize 命令除了父物件之外,還包含所有子物件的大小。

-aggregate 選項可以搭配 -stat 自變數使用,以取得仍根目錄之類型的詳細檢視。 藉由使用 !dumpheap -stat!objsize -aggregate -stat,您可以判斷哪些物件不再根目錄,並診斷各種記憶體問題。

僅支援 Windows。
PrintException [-nested] [-lines] [<Exception 物件位址>]

-或-

PE [-nested] [<Exception 物件位址>]
顯示和格式化任何衍生自指定位址 Exception 類別之物件的欄位。 如果您未指定位址,PrintException 命令會顯示目前線程上擲回的最後一個例外狀況。

巢狀 選項會顯示巢狀例外狀況對象的詳細數據。

如果可用, 選項會顯示來源資訊。

您可以使用此命令來格式化和檢視 _stackTrace 欄位,這是二進位陣列。
ProcInfo [-env] [-time] [-mem] 顯示進程、核心 CPU 時間和記憶體使用量統計數據的環境變數。 僅支援Windbg。
RCWCleanupList<RCWCleanupList 位址> 顯示等候清除之指定位址的運行時間可呼叫包裝函式清單。 僅支援Windbg。
SaveModule<檔名><基地址> 將位於指定位址的記憶體中載入的映像寫入指定的檔案。 僅支援Windbg。
SetHostRuntime [<runtime-directory>] 此命令會將 .NET 運行時間的路徑設定為用來裝載調試程式 (LLDB) 中 SOS 一部分執行的 Managed 程式代碼。 運行時間至少必須是 2.1.0 版或更新版本。 如果目錄中有空格,則必須以單引弧括住 (')。

一般而言,SOS 會嘗試尋找已安裝的 .NET 運行時間自動執行其 Managed 程式代碼,但如果失敗,可以使用此命令。 預設值是使用相同的運行時間 (libcoreclr) 進行偵錯。 如果偵錯的預設運行時間無法執行 SOS 程式代碼,或版本小於 2.1.0,請使用此命令。

如果您在執行 SOS 命令時收到下列錯誤訊息,請使用此命令將路徑設定為 2.1.0 或更新的 .NET 執行時間。

(lldb) clrstack
Error: Fail to initialize CoreCLR 80004005 ClrStack failed

(lldb) sethostruntime /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.6

您可以使用命令殼層中的 「dotnet --info」 來尋找已安裝 .NET 執行時間的路徑。
SetSymbolServer [-ms] [-disable] [-log] [-loadsymbols] [] [ -cachecache-path] [-directorysearch-directory] [-sympathwindows-symbol-path] [symbol-server-URL] 啟用符號伺服器下載支援。

-ms 選項可讓您從公用Microsoft符號伺服器下載。

-disable 選項會開啟符號下載支援。

-cache<cache-path> 選項會指定符號快取目錄。 如果未指定,則預設值為 $HOME/.dotnet/symbolcache。

-directory 選項會新增搜尋符號的路徑。 可以是一個以上。

-sympath 選項會以 Windows 符號路徑格式新增伺服器、快取和目錄路徑。

-log 選項會啟用符號下載記錄。

-loadsymbols 選項會嘗試下載運行時間的原生 .NET 符號。 lldb 和 dotnet-dump 支援。
SOSFlush 排清內部 SOS 快取。
SOSStatus [-reset] 顯示內部 SOS 狀態或重設內部快取狀態。
StopOnException [衍生] [-create | -create2 -create2] <Exception><Pseudo-register number> 導致調試程式在擲回指定的例外狀況時停止,但在擲回其他例外狀況時繼續執行。

衍生 選項會攔截指定的例外狀況,以及衍生自指定例外狀況的每個例外狀況。

僅支援Windbg。
SyncBlk [-all | <syncblk number>] 顯示指定的 SyncBlock 結構或所有 SyncBlock 結構。 如果您未傳遞任何自變數,則 SyncBlk 命令會顯示對應至線程所擁有物件的 SyncBlock 結構。

SyncBlock 結構是一個容器,用於不需要為每個物件建立的額外資訊。 它可以保存 COM Interop 數據、哈希碼,以及線程安全作業的鎖定資訊。
ThreadPool 顯示 Managed 線程集區的相關信息,包括佇列中的工作要求數目、完成埠線程的數目,以及定時器數目。
線程clrthreads) [-live] [-special] 顯示進程中的所有Managed線程。

線程 命令會顯示調試程式速記標識碼、CLR 線程標識元和操作系統線程標識碼。 此外,Threads 命令會顯示 Domain 數據行,指出線程執行所在的應用程式域、顯示 COM Apartment 模式的 APT 數據行,以及顯示線程中最後擲回例外狀況的 Exception 數據行。

-live 選項會顯示與即時線程相關聯的線程。

-special 選項會顯示CLR所建立的所有特殊線程。 特殊線程包括垃圾收集線程(在並行和伺服器垃圾收集中)、調試程式協助程式線程、完成項線程、AppDomain 卸除線程,以及線程集區定時器線程。

支援原生 AOT 應用程式。
ThreadState <State 值字段> 顯示線程的狀態。 value 參數是 [線程] 報表輸出中 [State] 字段的值。
Token2EE<模組名稱><令牌> 將指定模組中的指定元數據標記轉換成 MethodTable 結構或 MethodDesc 結構。

您可以傳遞模組名稱參數的 *,以找出該令牌在每個載入的受控模組中對應的內容。 您也可以傳遞模組的除錯程式名稱,例如 mscorlibimage00400000
U [-gcinfo] [-ehinfo] [-n] <MethodDesc address> |<程式代碼位址> 顯示方法的 MethodDesc 結構指標或方法主體內的程式代碼位址所指定 Managed 方法的批註反組譯碼。 U 命令會從頭到尾顯示整個方法,註釋會將元數據令牌轉換成名稱。

-gcinfo 選項會讓 U 命令顯示方法的 GCInfo 結構。

-ehinfo 選項會顯示 方法的例外狀況資訊。 您也可以使用 EHInfo 命令來取得此資訊。

-n 選項會停用來源檔名和行號的顯示。 如果調試程式有指定選項SYMOPT_LOAD_LINES,SOS 會查閱每個受管理框架的符號,如果成功,則會顯示對應的來源檔名和行號。 您可以指定 -n 選項來停用此行為。
VerifyHeap 檢查垃圾收集行程堆積是否有損毀的跡象,並顯示找到的任何錯誤。

堆積損毀可能是因為平台調用呼叫建構不正確所造成。

支援原生 AOT 應用程式。
VerifyObj<物件位址> 檢查傳遞為自變數的物件是否有損毀的跡象。 僅支援 Windows。
VMMap 周遊虛擬位址空間,並顯示套用至每個區域的保護類型。 僅支援Windbg。
VMStat 提供虛擬位址空間的摘要檢視,依套用至該記憶體的每個保護類型排序(可用、保留、認可、私用、對應、映像)。 TOTAL 資料行會顯示 AVERAGE 資料行乘以 BLK COUNT 資料行的結果。 僅支援Windbg。

Windows 調試程式

您也可以將 .NET 調試程序擴充功能載入至 WinDbg/dbg 調試程式 並在 Windows 調試程式中執行命令,以使用 .NET 調試程序擴充功能。 命令可用於即時進程或傾印。

每當偵錯的進程包含 .NET 運行時間時,Windbg 應該會自動載入延伸模組(coreclr.dll 或 libcoreclr.so)。

LLDB 調試程式

如需設定 LLDB .NET 調試程式延伸模組的指示,請參閱 dotnet-debugger-extensions。 命令可用於即時進程或傾印。

根據預設,您可以輸入:sos [command_name]來觸達所有命令。 不過,常見的命令已經過別名,因此您不需要 sos 前置詞:

命令 功能
analyzeoom 顯示配置要求上對 GC 堆積發生的最後一個 OOM 資訊。
bpmd 在指定的模組中,於指定的Managed方法上建立斷點。
clrmodules 列出程式中的Managed模組。
clrstack 僅提供Managed程式代碼的堆疊追蹤。
clrthreads 列出正在執行的Managed線程。
clru 顯示 Managed 方法的批注反組譯碼。
dbgout 啟用/停用 (-off) 內部 SOS 記錄。
dso 顯示目前堆疊界限內找到的所有Managed物件。
dumpalc 顯示載入指定物件之可收集 AssemblyLoadContext 的相關詳細數據。
dumparray 顯示 Managed 陣列的詳細數據。
dumpasync 顯示垃圾收集堆積上異步狀態機器的相關信息。
dumpassembly 顯示元件的詳細數據。
dumpclass 顯示指定位址上 EEClass 結構的相關信息。
dumpconcurrentdictionary 顯示並行字典內容。
dumpconcurrentqueue 顯示並行佇列內容。
dumpdelegate 顯示委派的相關信息。
dumpdomain 顯示所有 AppDomains 或指定元件內所有元件的相關信息。
dumpgcdata 顯示 GC 數據的相關信息。
dumpgen 顯示指定之產生的堆積內容。
dumpheap 顯示有關垃圾收集堆積的資訊,以及有關物件的收集統計數據。
dumpil 顯示與 Managed 方法相關聯的通用中繼語言 (CIL)。
dumplock 顯示 System.Threading.Lock 對象的相關信息,例如線程所持有的物件(預設值),或線程等候的物件。 此命令僅適用於 .NET 調試程式延伸模組
dumplog 將記憶體內部壓力記錄檔的內容寫入指定的檔案。
dumpmd 顯示指定位址上 MethodDesc 結構的相關信息。
dumpmodule 顯示位於指定位址之模組的相關信息。
dumpmt 顯示指定位址之方法數據表的相關信息。
dumpobj 顯示位於指定地址的物件資訊。
dumpruntimetypes 尋找 GC 堆積中的所有 System.RuntimeType 物件,並列印其參考的類型名稱和 MethodTable。
dumpsig 傾印由 <sigaddr> <moduleaddr>所指定之方法或欄位的簽章。
dumpsigelem 傾印簽章物件的單一專案。
dumpstack 顯示原生和受控堆疊追蹤。
dumpstackobjects 顯示目前堆疊界限內找到的所有Managed物件。
dumpvc 顯示值類別欄位的相關信息。
eeheap 顯示內部運行時間數據結構所耗用之進程記憶體的相關信息。
eestack 在進程中的所有線程上執行 dumpstack
eeversion 顯示運行時間和SOS版本的相關信息。
ehinfo 在 JIT 方法中顯示例外狀況處理區塊。
finalizequeue 顯示所有已註冊進行最終處理的物件。
findappdomain 嘗試解析 GC 物件的 AppDomain。
findroots 尋找並顯示跨 GC 集合的物件根目錄。
gchandles 顯示進程中垃圾收集行程句柄的相關統計數據。
gcheapstat 顯示垃圾收集行程的相關統計數據。
gcinfo 顯示方法的 JIT GC 編碼方式。
gcroot 顯示指定位址物件之參考(或根目錄)的相關信息。
gcwhere 顯示指定位址之 GC 堆積中的位置。
histclear 釋放Hist命令系列所使用的任何資源。
histinit 從儲存在偵錯專案中的壓力記錄檔,初始化 SOS 結構。
histobj 檢查所有壓力記錄檔重新配置記錄,並顯示可能導致位址傳入做為自變數的垃圾收集重新配置鏈結。
histobjfind 顯示參考指定位址之物件的所有記錄專案。
histroot 顯示與指定根目錄之升階和重新配置相關的資訊。
histstats 顯示壓力記錄統計數據。
ip2md 在已編譯 JIT 的程式代碼中,顯示位於指定位址的 MethodDesc 結構。
listnearobj 顯示前面的物件,並接替指定的位址。
loadsymbols 載入 .NET 原生模組符號。
logging 啟用/停用內部 SOS 記錄。
name2ee 顯示指定模組中指定型別或方法的 MethodTableEEClass 結構。
objsize 顯示指定物件的大小。
parallelstacks 顯示與 Visual Studio [平行堆疊] 面板類似的合併線程堆疊。
pathto 顯示從 <root><target>的 GC 路徑。
pe 顯示和格式化任何衍生自指定位址 Exception 類別之物件的欄位。
printexception 顯示和格式化任何衍生自指定位址 Exception 類別之物件的欄位。
runtimes 列出目標中的運行時間,或變更預設運行時間。
stoponcatch 目標進程會在下次執行期間攔截 Managed 例外狀況時中斷。
setclrpath 設定載入 coreclr dac/dbi 檔案的路徑。 setclrpath <path>
sethostruntime 設定或顯示要用來在 SOS 中執行 Managed 程式代碼的 .NET 執行時間目錄。
setsymbolserver 啟用符號伺服器支援。
setsostid 設定目前的OS tid/thread 索引,而不是使用LLDB提供的索引。 setsostid <tid> <index>
sos 執行各種coreclr偵錯命令。 使用 語法 sos <command-name> <args>。 如需詳細資訊,請參閱'soshelp'。
soshelp 沒有指定參數時顯示所有可用的指令,或顯示指定命令的詳細說明資訊:soshelp <command>
syncblk 顯示 SyncBlock 持有者資訊。
taskstate 以人類可讀取的格式顯示工作狀態。
threadpool 顯示運行時間線程集區的相關信息。
threadpoolqueue 顯示已排入佇列的線程集區工作專案。
threadstate 美化列印線程狀態的意義。
timerinfo 顯示執行定時器的相關信息。
token2ee 顯示指定之標記和模組的 MethodTable 結構和 MethodDesc 結構。
traverseheap 以 CLR Profiler 所瞭解的格式,將堆積資訊寫出至檔案。
verifyheap 檢查 GC 堆積是否有損毀的跡象。
verifyobj 檢查傳遞為自變數的物件是否有損毀的跡象。

Windbg/cdb 範例使用方式

命令 描述
!dumparray -start 2 -length 5 -details 00ad28d0 在位址 00ad28d0顯示陣列的內容。 顯示會從第二個元素開始,並繼續進行五個專案。
!dumpassembly 1ca248 在位址 1ca248顯示元件的內容。
!dumpheap 顯示垃圾收集行程堆積的相關信息。
!DumpLog 將記憶體內部壓力記錄檔的內容寫入目前目錄中稱為 StressLog.txt 的檔案。
!dumpmd 902f40 顯示位址 902f40MethodDesc 結構。
!dumpmodule 1caa50 在位址 1caa50顯示模組的相關信息。
!DumpObj a79d40 在位址 a79d40顯示對象的相關信息。
!DumpVC 0090320c 00a79d9c 使用位址 0090320c的方法數據表,在位址 00a79d9c 顯示實值類別的欄位。
!eeheap -gc 顯示垃圾收集行程所使用的進程記憶體。
!finalizequeue 顯示排程進行最終處理的所有物件。
!findappdomain 00a79d98 決定位於 位址 00a79d98之物件的應用程式域。
!gcinfo 5b68dbb8 顯示目前進程中的所有垃圾收集行程句柄。
!name2ee unittest.exe MainClass.Main 顯示模組 unittest.exe中類別 MainClassMain 方法的 MethodTableEEClass 結構。
!token2ee unittest.exe 02000003 顯示模組中位址 02000003 元資料令牌的相關信息,unittest.exe

LLDB 範例使用方式

命令 描述
dumparray -start 2 -length 5 -details 00ad28d0 在位址 00ad28d0顯示陣列的內容。 顯示會從第二個元素開始,並繼續進行五個專案。
dumpassembly 1ca248 在位址 1ca248顯示元件的內容。
dumpheap 顯示垃圾收集行程堆積的相關信息。
dumplog 將記憶體內部壓力記錄檔的內容寫入目前目錄中稱為 StressLog.txt 的檔案。
dumpmd 902f40 顯示位址 902f40MethodDesc 結構。
dumpmodule 1caa50 在位址 1caa50顯示模組的相關信息。
dumpobj a79d40 在位址 a79d40顯示對象的相關信息。
dumpvc 0090320c 00a79d9c 使用位址 0090320c的方法數據表,在位址 00a79d9c 顯示實值類別的欄位。
eeheap -gc 顯示垃圾收集行程所使用的進程記憶體。
findappdomain 00a79d98 決定位於 位址 00a79d98之物件的應用程式域。
gcinfo 5b68dbb8 顯示目前進程中的所有垃圾收集行程句柄。
name2ee unittest.exe MainClass.Main 顯示模組 unittest.exe中類別 MainClassMain 方法的 MethodTableEEClass 結構。
token2ee unittest.exe 02000003 顯示模組中位址 02000003 元資料令牌的相關信息,unittest.exe
clrthreads 顯示Managed線程。

另請參閱