Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek se vztahuje na: ✔️ dotnet-debug verze 0.0.710501 a novější verze
Poznámka:
dotnet-debug v současné době podporuje pouze aplikace založené na CoreCLR a v současné době se v macOS nepodporuje.
Install
Existují dva způsoby, jak stáhnout a nainstalovat dotnet-debug:
dotnet global tool (globální nástroj dotnet):
Pokud chcete nainstalovat nejnovější verzi
dotnet-debugbalíčku NuGet, použijte příkaz dotnet tool install :dotnet tool install --global dotnet-debugPřímé stahování:
Stáhněte spustitelný soubor nástroje, který odpovídá vaší platformě:
operační systém Platforma Windows x86 | x64 | Arm | arm-x64 Operační systém Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
Přehled
dotnet-debug [-h|--help] [--version] <command>
Description
Globální dotnet-debug nástroj umožňuje připojit se k živým procesům .NET a interaktivně analyzovat soubory výpisu paměti. Na rozdíl od dotnet-dumptoho, který se zaměřuje na shromažďování výpisů paměti a offline analýzu, dotnet-debug je určen pro kontrolu živého procesu. Podporuje všechny stejné příkazy ladění SOS jako dotnet-dump.
Tento nástroj je užitečný na platformách, jako je Alpine Linux, kde není k dispozici plně funkční lldb . Nástroj dotnet-debug spouští příkazy SOS pro analýzu spravovaného stavu a diagnostiky haldy, ale nejedná se o nativní ladicí program, takže zobrazení nativních rámců zásobníku není podporované.
Možnosti
--versionZobrazí verzi nástroje dotnet-debug.
-h|--helpZobrazuje nápovědu k příkazovému řádku.
Commands
| Command |
|---|
| dotnet-debug attach |
| dotnet-debug open-dump |
dotnet-debug attach
Připojí se k živému procesu a spustí interaktivní prostředí s příkazy ladění, které ho prozkoumá.
Přehled
dotnet-debug attach <process-id> [-c|--commands <debug_command>] [--accept-license-agreement]
Arguments
<process-id>ID procesu pro připojení a analýzu.
Možnosti
-c|--commands <debug_command>Spustí příkazy při spuštění. Více instancí tohoto parametru lze použít při vyvolání ke zřetězování příkazů. Příkazy se spouští v pořadí, v jakém jsou k dispozici na příkazovém řádku. Pokud chcete
dotnet-debugpo příkazech ukončit, měl by býtexitposlední příkaz .--accept-license-agreementPřijímá licenční smlouvu bez výzvy.
Example
Připojte se ke spuštěném procesu s ID 1234:
$ dotnet-debug attach 1234
Attaching to process: 1234 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>
Spusťte příkaz při připojení a ukončete:
dotnet-debug attach 1234 -c clrstack -c exit
dotnet-debug open-dump
Spustí interaktivní prostředí s příkazy ladění pro prozkoumání souboru s výpisem paměti.
Přehled
dotnet-debug open-dump <dump_path> [-c|--commands] [--accept-license-agreement]
Arguments
<dump_path>Cesta k souboru s výpisem paměti k analýze.
Možnosti
-c|--commands <debug_command>Spustí příkazy při spuštění. Více instancí tohoto parametru lze použít při vyvolání ke zřetězování příkazů. Příkazy se spouští v pořadí, v jakém jsou k dispozici na příkazovém řádku. Pokud chcete
dotnet-debugpo příkazech ukončit, měl by býtexitposlední příkaz .--accept-license-agreementPřijímá licenční smlouvu bez výzvy.
Example
Otevřete a analyzujte soubor s výpisem paměti:
$ dotnet-debug open-dump ./core_20260209_135837
Loading dump: ./core_20260209_135837 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>
Ladění příkazů SOS
Příkazy attach i open-dump příkazy zobrazí interaktivní relaci, která přijímá následující příkazy SOS.
| Command | Funkce |
|---|---|
analyzeoom |
Zobrazí informace o posledním objektu OOM, ke kterému došlo v žádosti o přidělení haldy GC. |
clrmodules |
Zobrazí seznam spravovaných modulů v procesu. |
clrstack |
Poskytne trasování zásobníku pouze pro spravovaný kód. |
clrthreads |
Zobrazí seznam spravovaných vláken, která jsou spuštěná. |
clru |
Zobrazí anotovaný překlad spravované metody. |
d nebo readmemory |
Vypíše obsah paměti. |
dbgout |
Povolí nebo zakáže (-off) interní protokolování SOS. |
dso |
Zobrazí všechny spravované objekty nalezené v rámci aktuálního zásobníku. |
dumpalc |
Zobrazí podrobnosti o collectible AssemblyLoadContext, do kterého je zadaný objekt načten. |
dumparray |
Zobrazí podrobnosti o spravovaném poli. |
dumpasync |
Zobrazí informace o asynchronních stavových počítačích na haldě s uvolňováním paměti. |
dumpassembly |
Zobrazí podrobnosti o sestavení. |
dumpclass |
Zobrazí informace o struktuře EEClass na zadané adrese. |
dumpconcurrentdictionary |
Zobrazí souběžný obsah slovníku. |
dumpconcurrentqueue |
Zobrazí souběžný obsah fronty. |
dumpdelegate |
Zobrazí informace o delegátu. |
dumpdomain |
Zobrazí informace o všech sestaveních ve všech doménách AppDomains nebo zadaném sestavení. |
dumpgcdata |
Zobrazí informace o datech GC. |
dumpgen |
Zobrazí obsah haldy pro zadanou generaci. |
dumpheap |
Zobrazí informace o statistikách haldy a shromažďování paměti o objektech. |
dumpil |
Zobrazí běžný zprostředkující jazyk (CIL), který je přidružený ke spravované metodě. |
dumplog |
Zapíše obsah zátěžového protokolu uloženého v paměti do zadaného souboru. |
dumpmd |
Zobrazí informace o struktuře MethodDesc na zadané adrese. |
dumpmodule |
Zobrazí informace o modulu na zadané adrese. |
dumpmt |
Zobrazí informace o tabulce metod na zadané adrese. |
dumpobj |
Zobrazí informace o objektu na zadané adrese. |
dumpruntimetypes |
Vyhledá všechny objekty System.RuntimeType v haldě GC a vytiskne název typu a MethodTable, na které odkazují. |
dumpsig |
Vypisuje podpis metody nebo pole určeného parametrem <sigaddr> <moduleaddr>. |
dumpsigelem |
Vypisuje jeden prvek objektu podpisu. |
dumpstackobjects |
Zobrazí všechny spravované objekty nalezené v rámci aktuálního zásobníku. |
dumpvc |
Zobrazí informace o polích třídy hodnot. |
eeheap |
Zobrazí informace o paměti procesu spotřebované interními datovými strukturami modulu runtime. |
eestack |
Spouští dumpstack se na všech vláknech v procesu. |
eeversion |
Zobrazí informace o modulech runtime a verzích SOS. |
ehinfo |
Zobrazí bloky zpracování výjimek v metodě jit-ed. |
exit nebo quit |
Ukončí interaktivní režim. |
finalizequeue |
Zobrazí všechny objekty, které jsou registrovány pro dokončení. |
findappdomain |
Pokusí se přeložit AppDomain objektu GC. |
gchandles |
Zobrazí statistické údaje o popisovačích systému uvolňování paměti v procesu. |
gcheapstat |
Zobrazí statistiku o uvolňování paměti. |
gcinfo |
Zobrazí kódování GC JIT pro metodu. |
gcroot |
Zobrazí informace o odkazech (nebo kořenech) objektu na zadané adrese. |
gcwhere |
Zobrazí umístění v haldě GC zadané adresy. |
histclear |
Uvolní všechny prostředky používané rodinou příkazů Hist. |
histinit |
Inicializuje struktury SOS ze zátěžového protokolu uloženého v laděné položce. |
histobj |
Zkontroluje všechny záznamy přemístění protokolu zatížení a zobrazí řetězec přemístění uvolňování paměti, které mohly vést k adrese předané jako argument. |
histobjfind |
Zobrazí všechny položky protokolu, které odkazují na objekt na zadané adrese. |
histroot |
Zobrazí informace týkající se propagace a přemístění zadaného kořenu. |
histstats |
Zobrazí statistiky protokolu napětí. |
ip2md |
MethodDesc Zobrazí strukturu na zadané adrese v kódu, který byl zkompilován JIT. |
listnearobj |
Zobrazí objekt, který předchází zadané adrese a bude úspěšný. |
logopen |
Povolí protokolování souborů konzoly. |
logclose |
Zakáže protokolování souborů konzoly. |
logging |
Povolí nebo zakáže interní protokolování SOS. |
lm nebo modules |
Zobrazí nativní moduly v procesu. |
name2ee |
MethodTable Zobrazí a EEClass struktury pro zadaný typ nebo metodu v zadaném modulu. |
objsize |
Zobrazí velikost zadaného objektu. |
parallelstacks |
Zobrazí zásobník sloučených vláken podobně jako na panelu Paralelní zásobníky sady Visual Studio. |
pathto |
Zobrazí cestu GC od <root> do <target>. |
pe nebo printexception |
Zobrazí a formátuje pole libovolného objektu Exception odvozeného z třídy na zadané adrese. |
r nebo registers |
Zobrazí registry vlákna. |
runtimes |
Zobrazí seznam modulů runtime v cíli nebo změní výchozí modul runtime. |
setclrpath |
Nastaví cestu pro načtení souborů dac/dbi coreclr pomocí setclrpath <path>. |
setsymbolserver |
Povolí podporu serveru symbolů. |
sos |
Spustí různé příkazy ladění coreclr. Použijte syntaxi sos <command-name> <args>. Další informace potřebujete.soshelp |
soshelp nebo help |
Zobrazí všechny dostupné příkazy. |
soshelp <command> nebo help <command> |
Zobrazí zadaný příkaz. |
syncblk |
Zobrazí informace o držiteli syncblocku. |
taskstate |
Zobrazí stav úkolu v čitelném formátu člověka. |
threadpool |
Zobrazí informace o fondu vláken modulu runtime. |
threadpoolqueue |
Zobrazí pracovní položky fondu vláken ve frontě. |
threadstate |
Docela vytiskne význam stavu vláken. |
threads <threadid> nebo setthread <threadid> |
Nastaví nebo zobrazí aktuální ID vlákna pro příkazy SOS. |
timerinfo |
Zobrazí informace o spuštěných časovačích. |
token2ee |
Zobrazí strukturu MethodTable a strukturu MethodDesc pro zadaný token a modul. |
traverseheap |
Zapíše informace haldy do souboru ve formátu, kterému rozumí profiler CLR. |
verifyheap |
Zkontroluje známky poškození haldy GC. |
verifyobj |
Zkontroluje, zda objekt, který je předán jako argument, jeví známky poškození. |
Poznámka:
Další podrobnosti najdete v tématu Rozšíření ladění SOS pro .NET.
Slouží dotnet-debug k připojení k živému procesu.
Následující příklad ukazuje, jak připojit ke spuštěném procesu .NET a prozkoumat problém s fondem vláken:
$ dotnet-debug attach 1902
Attaching to process: 1902 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>
Tato akce zobrazí interaktivní relaci, která přijímá příkazy jako:
> clrstack
OS Thread Id: 0x573d (0)
Child SP IP Call Site
00007FFD28B42C58 00007fb22c1a8ed9 [HelperMethodFrame_PROTECTOBJ: 00007ffd28b42c58] System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean, Boolean)
00007FFD28B42DD0 00007FB1B1334F67 System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.Program.Foo4(System.String)
00007FFD28B42ED0 00007FB1B18D2FC4 SymbolTestApp.Program.Foo2(Int32, System.String)
00007FFD28B42F00 00007FB1B18D2F5A SymbolTestApp.Program.Foo1(Int32, System.String)
00007FFD28B42F30 00007FB1B18D168E SymbolTestApp.Program.Main(System.String[])
Zobrazení neošetřené výjimky:
> pe -lines
Exception object: 00007fb18c038590
Exception type: System.Reflection.TargetInvocationException
Message: Exception has been thrown by the target of an invocation.
InnerException: System.Exception, Use !PrintException 00007FB18C038368 to see more.
StackTrace (generated):
SP IP Function
00007FFD28B42DD0 0000000000000000 System.Private.CoreLib.dll!System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean, Boolean)
00007FFD28B42DD0 00007FB1B1334F67 System.Private.CoreLib.dll!System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)+0xa7
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.dll!SymbolTestApp.Program.Foo4(System.String)+0x15d
StackTraceString: <none>
HResult: 80131604
dotnet-debug versus dotnet-dump
dotnet-debug a dotnet-dump sdílejte stejné příkazy ladění SOS, ale slouží různým primárním účelům:
| Vlastnost | dotnet-debug |
dotnet-dump |
|---|---|---|
| Připojení k živému procesu | ✔️ | ❌ |
| Shromažďování výpisů paměti | ❌ | ✔️ |
| Analýza souborů s výpisem paměti | ✔️ | ✔️ |
Výpis procesů .NET (ps) |
❌ | ✔️ |
Použijte dotnet-debug , když potřebujete interaktivně ladit živý proces. Použijte dotnet-dump , když potřebujete shromáždit výpisy paměti nebo je analyzovat offline.