Extensie voor SOS-foutopsporing

Met de EXTENSIE VOOR SOS-foutopsporing kunt u informatie bekijken over code die wordt uitgevoerd in de .NET-runtime, zowel op liveprocessen als dumps. De extensie is vooraf geïnstalleerd met dotnet-dump en Windbg/dbg en kan worden gedownload voor gebruik met LLDB. U kunt de SOS-foutopsporingsextensie gebruiken voor het volgende:

  • Verzamel informatie over de beheerde heap.
  • Zoek naar heap corruptie.
  • Interne gegevenstypen weergeven die door de runtime worden gebruikt.
  • Bekijk informatie over alle beheerde code die in de runtime wordt uitgevoerd.

Syntaxis

In Windows: ![command] [options]

In Linux en macOS: sos [command] [options]

Veel van de opdrachten hebben aliassen of snelkoppelingen onder lldb: clrstack [options]

Opdracht

De volgende tabel met opdrachten is ook beschikbaar onder Help of soshelp. Afzonderlijke opdrachthulp is beschikbaar met behulp van soshelp <command>.

Opdracht Beschrijving
bpmd [-nofuturemodule] [<module name method name>><] [-md<MethodDesc>] -list-clear< pending breakpoint number-clearall> Hiermee maakt u een onderbrekingspunt bij de opgegeven methode in de opgegeven module.

Als de opgegeven module en methode niet zijn geladen, wacht deze opdracht op een melding dat de module is geladen en just-in-time (JIT) is gecompileerd voordat u een onderbrekingspunt maakt.

U kunt de lijst met onderbrekingspunten in behandeling beheren met behulp van de opties -list, -clear en -clearall :

Met de optie -list wordt een lijst gegenereerd met alle onderbrekingspunten die in behandeling zijn. Als een onderbrekingspunt in behandeling een niet-nulmodule-id heeft, is dat onderbrekingspunt specifiek voor een functie in die specifieke geladen module. Als het onderbrekingspunt in behandeling een nulmodule-id heeft, is dat onderbrekingspunt van toepassing op modules die nog niet zijn geladen.

Gebruik de optie -clear of clearall om in behandeling zijnde onderbrekingspunten uit de lijst te verwijderen.
CLRStack [-a] [-l] [-p] [-n] [-f] [-r] [-all] Biedt alleen een stacktracering van beheerde code.

Met de optie -p worden argumenten voor de beheerde functie weergegeven.

De optie -l toont informatie over lokale variabelen in een frame. De SOS-foutopsporingsextensie kan geen lokale namen ophalen, dus de uitvoer voor lokale namen heeft de indeling <van de lokale adreswaarde>=><.

De optie -a is een snelkoppeling voor -l en -p gecombineerd.

Met de optie -n wordt de weergave van bronbestandsnamen en regelnummers uitgeschakeld. Als het foutopsporingsprogramma de optie heeft SYMOPT_LOAD_LINES opgegeven, zoekt SOS de symbolen voor elk beheerd frame op en wordt de bijbehorende bronbestandsnaam en het bijbehorende regelnummer weergegeven. De parameter -n (geen regelnummers) kan worden opgegeven om dit gedrag uit te schakelen.

Met de optie -f (volledige modus) worden de systeemeigen frames weergegeven die deze combineren met de beheerde frames en de assemblynaam en functie-offset voor de beheerde frames. Met deze optie worden geen systeemeigen frames weergegeven wanneer deze worden gebruikt met dotnet-dump.

Met de optie -r worden de registers voor elk stackframe gedumpt.

Met de optie -all worden alle stacks van de beheerde threads gedumpt.
COMState Geeft het COM-appartementsmodel weer voor elke thread en een Context aanwijzer, indien beschikbaar. Deze opdracht wordt alleen ondersteund in Windows.
DumpArray [-start<startIndex>] [-lengte<>] [-details] [-nofields] <matrixobjectadres>

– of –

DA [-start<startIndex>] [-lengte<>] [-details] [-nofields] matrixobjectadres>
Onderzoekt elementen van een matrixobject.

Met de optie -start wordt de beginindex opgegeven waarop elementen moeten worden weergegeven.

Met de optie -length geeft u op hoeveel elementen moeten worden weergegeven.

Met de optie -details worden details van het element weergegeven met behulp van de indelingen DumpObj en DumpVC .

Met de optie -nofields voorkomt u dat matrices worden weergegeven. Deze optie is alleen beschikbaar wanneer de optie -details is opgegeven.
DumpAsync (dumpasync) [-mt<MethodTable-adres>] [-type<gedeeltelijke typenaam>] [-waiting] [-roots] DumpAsync doorkruist de verzamelde heap garbage en zoekt naar objecten die asynchrone statusmachines vertegenwoordigen zoals gemaakt wanneer de status van een asynchrone methode wordt overgebracht naar de heap. Met deze opdracht worden asynchrone statusmachines herkend die zijn gedefinieerd als , , , en async ValueTask<T>async ValueTask. async Task<T>async Taskasync void

De uitvoer bevat een blok met details voor elk gevonden asynchrone statusmachineobject. Deze details omvatten:
- Een regel voor het type asynchrone statusmachineobject, inclusief het MethodTable-adres, het objectadres, de grootte en de naam van het type.
- Een regel voor de naam van het type statusmachine zoals opgenomen in het object.
- Een lijst van elk veld op de statusmachine.
- Een regel voor een vervolg van dit statusmachineobject, als een of meer zijn geregistreerd.
- Gedetecteerde GC-roots voor dit asynchrone statusmachineobject.
DumpAssembly-assemblyadres<> Geeft informatie weer over een assembly.

Met de opdracht DumpAssembly worden meerdere modules weergegeven, als deze bestaan.

U kunt een assemblyadres ophalen met behulp van de opdracht DumpDomain .
DumpClass EEClass-adres<> Geeft informatie weer over de EEClass structuur die is gekoppeld aan een type.

Met de opdracht DumpClass worden statische veldwaarden weergegeven, maar worden geen niet-statische veldwaarden weergegeven.

Gebruik de opdracht DumpMT, DumpObj, Name2EE of Token2EE om een EEClass structuuradres op te halen.
DumpDomain [<domeinadres>] Inventariseert elk Assembly object dat binnen het opgegeven AppDomain objectadres wordt geladen. Wanneer de opdracht DumpDomain zonder parameters wordt aangeroepen, worden alle AppDomain objecten in een proces weergegeven. Omdat .NET (Core) slechts één AppDomainobject heeft, retourneert DumpDomain slechts één object.
DumpHeap [-stat] [-tekenreeksen] [-korte] [-min<grootte] [-max<grootte>>] [-thinlock] [-startAtLowerBound] [-mt<MethodTable-adres>] [-type<gedeeltelijke typenaam>] [begin [einde]] Geeft informatie weer over de verzamelde heap- en verzamelingsstatistieken over objecten.

Met de opdracht DumpHeap wordt een waarschuwing weergegeven als er overmatige fragmentatie in de garbagecollection heap wordt gedetecteerd.

De optie -stat beperkt de uitvoer tot de statistische typesamenvatting.

De optie -strings beperkt de uitvoer tot een statistische tekenreekswaardesamenvatting.

Met de optie -short beperkt u de uitvoer tot alleen het adres van elk object. Hiermee kunt u eenvoudig uitvoer van de opdracht doorsluisen naar een andere foutopsporingsprogrammaopdracht voor automatisering.

Met de optie -min worden objecten genegeerd die kleiner zijn dan de size parameter, die is opgegeven in bytes.

Met de optie -max worden objecten genegeerd die groter zijn dan de size parameter, die is opgegeven in bytes.

De optie -thinlock rapporteert ThinLocks. Zie de opdracht SyncBlk voor meer informatie.

De -startAtLowerBound optie dwingt de heap-wandeling af om te beginnen bij de ondergrens van een opgegeven adresbereik. Tijdens de planningsfase is de heap vaak niet beloopbaar omdat objecten worden verplaatst. Met deze optie wordt DumpHeap gedwongen om te beginnen met het doorlopen van de opgegeven ondergrens. U moet het adres van een geldig object opgeven als de ondergrens voor deze optie. U kunt geheugen weergeven op het adres van een ongeldig object om de volgende methodetabel handmatig te vinden. Als de garbagecollection zich momenteel in een aanroep bevindt, memcopykunt u mogelijk ook het adres van het volgende object vinden door de grootte toe te voegen aan het beginadres, dat wordt opgegeven als parameter.

Met de optie -mt worden alleen de objecten weergegeven die overeenkomen met de opgegeven MethodTable structuur.

Met de optie -type worden alleen de objecten weergegeven waarvan de typenaam een subtekenreeksovereenkomst is van de opgegeven tekenreeks.

De start parameter begint met het weergeven van het opgegeven adres.

De end parameter stopt de vermelding op het opgegeven adres.
Object DumpIL<Managed DynamicMethod | <>DynamicMethodDesc-aanwijzer> | <MethodDesc-aanwijzer> Geeft de algemene tussenliggende taal (CIL) weer die is gekoppeld aan een beheerde methode.

Dynamische CIL wordt anders verzonden dan CIL dat vanuit een assembly wordt geladen. Dynamische CIL verwijst naar objecten in een beheerde objectmatrix in plaats van naar metagegevenstokens.
DumpLog [-addr<addressOfStressLog>] [<Bestandsnaam>] Hiermee schrijft u de inhoud van een stresslogboek in het geheugen naar het opgegeven bestand. Als u geen naam opgeeft, maakt u met deze opdracht een bestand met de naam StressLog.txt in de huidige map.

Het stresslogboek in het geheugen helpt u stressfouten te diagnosticeren zonder vergrendelingen of I/O te gebruiken. Als u het stresslogboek wilt inschakelen, stelt u de volgende registersleutels in onder HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\. NETFramework:

(DWORD) StressLog = 1

(DWORD) LogFacility = 0xffffffff

(DWORD) StressLogSize = 65536

Met de optionele -addr optie kunt u een ander stresslogboek opgeven dan het standaardlogboek.
DumpMD<MethodDesc-adres> Geeft informatie weer over een MethodDesc structuur op het opgegeven adres.

U kunt de OPDRACHT IP2MD gebruiken om het MethodDesc structuuradres op te halen uit een beheerde functie.
DumpMT [-MD] <MethodTable-adres> Geeft informatie weer over een methodetabel op het opgegeven adres. Als u de optie -MD opgeeft, wordt een lijst weergegeven met alle methoden die zijn gedefinieerd met het object.

Elk beheerd object bevat een methodetabelpointer.
DumpModule [-mt] <Moduleadres> Geeft informatie weer over een module op het opgegeven adres. Met de optie -mt worden de typen weergegeven die zijn gedefinieerd in een module en de typen waarnaar wordt verwezen door de module

U kunt de opdracht DumpDomain of DumpAssembly gebruiken om het adres van een module op te halen.
DumpObj [-nofields] <objectadres>

– of –

DO-objectadres<>
Geeft informatie weer over een object op het opgegeven adres. Met de opdracht DumpObj worden de velden, de EEClass structuurgegevens, de methodetabel en de grootte van het object weergegeven.

U kunt de opdracht DumpStackObjects gebruiken om het adres van een object op te halen.

U kunt de opdracht DumpObj uitvoeren op velden van het type CLASS , omdat ze ook objecten zijn.

Met de -optie Nofields voorkomt u dat velden van het object worden weergegeven. Dit is handig voor objecten zoals Tekenreeks.
DumpRuntimeTypes Geeft de runtimetypeobjecten weer in de garbagecollection-heap en vermeldt de bijbehorende typenamen en methodetabellen.
DumpStack [-EE] [-n] [topstack]bottom] Geeft een stacktracering weer.

De optie -EE zorgt ervoor dat de opdracht DumpStack alleen beheerde functies weergeeft. Gebruik de top en bottom parameters om de stackframes te beperken die worden weergegeven op x86-platforms.

Met de optie -n wordt de weergave van bronbestandsnamen en regelnummers uitgeschakeld. Als het foutopsporingsprogramma de optie heeft SYMOPT_LOAD_LINES opgegeven, zoekt SOS de symbolen voor elk beheerd frame op en wordt de bijbehorende bronbestandsnaam en het bijbehorende regelnummer weergegeven. De parameter -n (geen regelnummers) kan worden opgegeven om dit gedrag uit te schakelen.
DumpSig<sigaddr moduleaddr><> Geeft informatie weer over een Sig structuur op het opgegeven adres.
DumpSigElem<sigaddr moduleaddr><> Hiermee wordt één element van een handtekeningobject weergegeven. In de meeste gevallen moet u DumpSig gebruiken om afzonderlijke handtekeningobjecten te bekijken. Als een handtekening echter op een of andere manier is beschadigd, kunt u DumpSigElem gebruiken om de geldige gedeelten ervan te lezen.
DumpStackObjects [-verify] [topstack]bottom]

– of –

DSO [-verify] [topstack [bottomstack]]
Geeft alle beheerde objecten weer die binnen de grenzen van de huidige stack zijn gevonden.

Met de optie -verify wordt elk niet-statisch CLASS veld van een objectveld gevalideerd.

Gebruik de opdracht DumpStackObject met stacktraceringsopdrachten zoals K (windbg) of bt (lldb) samen met de clrstack-opdracht om de waarden van lokale variabelen en parameters te bepalen.
Adres van<>DumpVC<MethodTable> Geeft informatie weer over de velden van een waardeklasse op het opgegeven adres.

Met de parameter MethodTable kan de Opdracht DumpVC velden correct interpreteren. Waardeklassen hebben geen methodetabel als eerste veld.
EEHeap [-gc] [-loader] Geeft informatie weer over procesgeheugen dat wordt verbruikt door interne runtimegegevensstructuren.

De opties -gc en -loader beperken de uitvoer van deze opdracht tot garbagecollector- of laadprogrammagegevensstructuren.

De informatie voor de garbagecollection vermeldt de bereiken van elk segment in de beheerde heap. Als de aanwijzer binnen een segmentbereik valt dat is opgegeven door -gc, is de aanwijzer een objectaanwijzer.
EEStack [-short] [-EE] Hiermee wordt de opdracht DumpStack uitgevoerd op alle threads in het proces.

De optie -EE wordt rechtstreeks doorgegeven aan de opdracht DumpStack . De -short-parameter beperkt de uitvoer tot de volgende soorten threads:

Threads die een slot hebben genomen.

Threads die zijn vastgelopen om een garbagecollection toe te staan.

Threads die zich momenteel in beheerde code bevinden.
EHInfo [<MethodDesc address>] [<Code address>] Geeft de afhandelingsblokken voor uitzonderingen weer in een opgegeven methode. Met deze opdracht worden de codeadressen en offsets voor het componentblok (het try blok) en het handlerblok (het catch blok) weergegeven.
Veelgestelde vragen Geeft veelgestelde vragen weer. Niet ondersteund in dotnet-dump.
FinalizeQueue [-detail] | [-allReady] [-short] Geeft alle objecten weer die zijn geregistreerd voor de voltooien.

De optie -detail geeft extra informatie weer over alle SyncBlocks die moeten worden opgeschoond en alle RuntimeCallableWrappers (RCW's) die wachten op opschonen. Beide gegevensstructuren worden in de cache opgeslagen en opgeschoond door de finalizer-thread wanneer deze wordt uitgevoerd.

Met -allReady de optie worden alle objecten weergegeven die gereed zijn voor voltooien, ongeacht of ze al zijn gemarkeerd door de garbagecollection, of worden gemarkeerd door de volgende garbagecollection. De objecten die zich in de lijst 'Gereed voor voltooien' bevinden, zijn voltooide objecten die niet meer zijn geroot. Deze optie kan erg duur zijn, omdat hiermee wordt gecontroleerd of alle objecten in de definitieve wachtrijen nog steeds zijn geroot.

De -short optie beperkt de uitvoer tot het adres van elk object. Als deze wordt gebruikt in combinatie met -allReady, worden alle objecten geïnventariseerd met een finalizer die niet meer zijn geroot. Als deze afzonderlijk wordt gebruikt, worden alle objecten in de voltooide wachtrijen en 'gereed voor voltooien' weergegeven.
Adres van FindAppDomain-object<> Bepaalt het toepassingsdomein van een object op het opgegeven adres.
FindRoots-gen< N | >-gen elke |<objectadres> Zorgt ervoor dat het foutopsporingsprogramma in de foutopsporing wordt onderbroken in de volgende verzameling van de opgegeven generatie. Het effect wordt opnieuw ingesteld zodra de onderbreking plaatsvindt. Als u de volgende verzameling wilt verbreken, moet u de opdracht opnieuw uitvoeren. De <objectadresvorm> van deze opdracht wordt gebruikt nadat de onderbreking is veroorzaakt door de eventuele gebeurtenissen -gen of -gen. Op dat moment heeft de foutopsporing de juiste status voor FindRoots om wortels voor objecten van de huidige veroordeelde generaties te identificeren. Alleen ondersteund in Windows.
GCHandles [-perdomain] Geeft statistieken weer over garbagecollection-ingangen in het proces.

De optie -perdomain rangschikt de statistieken per toepassingsdomein.

Gebruik de opdracht GCHandles om geheugenlekken te vinden die worden veroorzaakt door garbagecollection-lekken. Een geheugenlek treedt bijvoorbeeld op wanneer code een grote matrix behoudt omdat er nog steeds een sterke garbagecollectorgreep naar verwijst en de ingang wordt verwijderd zonder deze vrij te maken.

Alleen ondersteund in Windows.
GCHandleLeaks Zoekt in het geheugen naar verwijzingen naar sterke en vastgemaakte garbagecollectorgrepen in het proces en geeft de resultaten weer. Als er een ingang wordt gevonden, geeft de opdracht GCHandleLeaks het adres van de verwijzing weer. Als er geen ingang in het geheugen wordt gevonden, wordt met deze opdracht een melding weergegeven. Alleen ondersteund in Windows.
Adrescodeadres><GCInfo<MethodDesc> Geeft gegevens weer die aangeeft wanneer registers of stacklocaties beheerde objecten bevatten. Als er een garbagecollection optreedt, moet de collector de locaties van verwijzingen naar objecten weten, zodat deze kunnen worden bijgewerkt met nieuwe objectpointerwaarden.
GCRoot [-nostacks] [-all] <Objectadres> Geeft informatie weer over verwijzingen (of roots) naar een object op het opgegeven adres.

De GCRoot-opdracht onderzoekt de volledige beheerde heap en de handletabel voor ingangen binnen andere objecten en ingangen op de stack. Elke stack wordt vervolgens gezocht naar aanwijzers naar objecten en de finalizerwachtrij wordt ook doorzocht.

Met deze opdracht wordt niet bepaald of een stack-hoofdmap geldig is of wordt verwijderd. Gebruik de opdrachten clrstack en U om het frame te demonteren waartoe de lokale waarde of argumentwaarde behoort om te bepalen of de stackhoofdmap nog in gebruik is.

De optie -nostacks beperkt de zoekopdracht tot garbagecollection-ingangen en bereikbare objecten.

Met de optie -all worden alle wortels weergegeven in plaats van alleen de unieke wortels.
GCWhere-objectadres<> Geeft de locatie en grootte weer in de garbagecollection heap van het argument dat is doorgegeven. Wanneer het argument in de beheerde heap ligt, maar geen geldig objectadres is, wordt de grootte weergegeven als 0 (nul).
Help (soshelp) [<opdracht>] [faq] Geeft alle beschikbare opdrachten weer wanneer er geen parameter is opgegeven of geeft gedetailleerde Help-informatie weer over de opgegeven opdracht.

De faq parameter geeft antwoorden op veelgestelde vragen weer.
HeapStat [-inclUnrooted-iu | ] Geeft de generatiegrootten weer voor elke heap en de totale vrije ruimte in elke generatie op elke heap. Als de optie -inclUnrooted is opgegeven, bevat het rapport informatie over de beheerde objecten uit de garbagecollection heap die niet meer is geroot. Alleen ondersteund in Windows.
Hist Clear Publiceert alle resources die worden gebruikt door de reeks Hist opdrachten.

Over het algemeen hoeft u niet expliciet aan te roepen HistClear, omdat de vorige resources worden HistInit opgeschoond.
HistInit Initialiseert de SOS-structuren uit het stresslogboek dat is opgeslagen in de foutopsporing.
HistObj<obj_address> Onderzoekt alle herlocatierecords van stresslogboeken en toont de keten van garbagecollectionverplaatsingen die mogelijk hebben geleid tot het adres dat als argument is doorgegeven.
HistObjFind<obj_address> Geeft alle logboekvermeldingen weer die verwijzen naar een object op het opgegeven adres.
HistRoot-hoofdmap<> Geeft informatie weer met betrekking tot zowel promoties als verplaatsingen van de opgegeven hoofdmap.

De hoofdwaarde kan worden gebruikt om de verplaatsing van een object via de garbagecollections bij te houden.
IP2MD-codeadres (ip2md) <> Geeft de MethodDesc structuur weer op het opgegeven adres in code die is gecompileerd met JIT.
ListNearObj (lno) <obj_address> Geeft de objecten weer die voorafgaan aan en volgen op het opgegeven adres. Met de opdracht wordt gezocht naar het adres in de garbagecollection-heap die eruitziet als een geldig begin van een beheerd object (op basis van een geldige methodetabel) en het object dat volgt op het argumentadres. Alleen ondersteund in Windows.
MinidumpMode [0] [1] Hiermee voorkomt u dat onveilige opdrachten worden uitgevoerd wanneer u een minidump gebruikt.

Geef 0 door om deze functie of 1 uit te schakelen om deze functie in te schakelen. Standaard is de waarde MinidumpMode ingesteld op 0.

Minidumps die zijn gemaakt met de opdracht .dump /m of .dump hebben beperkte CLR-specifieke gegevens en u kunt alleen een subset van SOS-opdrachten correct uitvoeren. Sommige opdrachten kunnen mislukken met onverwachte fouten omdat vereiste gebieden van het geheugen niet zijn toegewezen of slechts gedeeltelijk zijn toegewezen. Met deze optie kunt u onveilige opdrachten uitvoeren tegen minidumps.

Alleen ondersteund met Windbg.
Naam2EE (name2ee) <modulenaamtype<>of methodenaam>

– of –

Naam2EE-modulenaam!<<>type of methodenaam>
Geeft de MethodTable structuur en EEClass structuur weer voor het opgegeven type of de opgegeven methode in de opgegeven module.

De opgegeven module moet in het proces worden geladen.

Als u de juiste typenaam wilt ophalen, bladert u door de module met behulp van de Ildasm.exe (IL Disassembler). U kunt ook doorgeven * als de parameter voor de modulenaam om alle geladen beheerde modules te doorzoeken. De parameter voor de modulenaam kan ook de naam van het foutopsporingsprogramma zijn voor een module, zoals mscorlib of image00400000.

Deze opdracht ondersteunt de syntaxis van het Windows-foutopsporingsprogramma van <<module>>!type. Het type moet volledig zijn gekwalificeerd.
ObjSize [<Objectadres>] | [-aggregaat] [-stat] Geeft de grootte van het opgegeven object weer. Als u geen parameters opgeeft, geeft de opdracht ObjSize de grootte weer van alle objecten die zijn gevonden op beheerde threads, worden alle garbagecollection-ingangen in het proces weergegeven en wordt de grootte van objecten die door deze ingangen worden verwezen, totaliseren. De opdracht ObjSize bevat de grootte van alle onderliggende objecten naast het bovenliggende object.

De optie -aggregate kan worden gebruikt in combinatie met het argument -stat om een gedetailleerde weergave te krijgen van de typen die nog steeds zijn geroot. Door !dumpheap -stat en !objsize -aggregate -stat te gebruiken, kunt u bepalen welke objecten niet meer zijn geroot en verschillende geheugenproblemen diagnosticeren.

Alleen ondersteund in Windows.
PrintException [-nested] [-lines] [<Uitzonderingsobjectadres>]

– of –

PE [genest] [<Adres van> uitzonderingsobject]
Hiermee worden velden weergegeven en opgemaakt van een object dat is afgeleid van de Exception klasse op het opgegeven adres. Als u geen adres opgeeft, wordt met de opdracht PrintException de laatste uitzondering weergegeven die op de huidige thread is opgetreden.

Met de optie -geneste worden details weergegeven over geneste uitzonderingsobjecten.

Met de optie -lines worden brongegevens weergegeven, indien beschikbaar.

U kunt deze opdracht gebruiken om het _stackTrace veld op te maken en weer te geven. Dit is een binaire matrix.
ProcInfo [-env] [-time] [-mem] Geeft omgevingsvariabelen weer voor het proces, de CPU-tijd van de kernel en statistieken over geheugengebruik. Alleen ondersteund met Windbg.
RCWCleanupList<RCWCleanupList-adres> Geeft de lijst weer met runtime aanroepbare wrappers op het opgegeven adres dat wacht op opschonen. Alleen ondersteund met Windbg.
Bestandsnaam van saveModule-basisadres<><> Hiermee schrijft u een afbeelding, die in het geheugen op het opgegeven adres wordt geladen, naar het opgegeven bestand. Alleen ondersteund met Windbg.
SetHostRuntime [<runtime-directory>] Met deze opdracht wordt het pad naar de .NET-runtime ingesteld voor het hosten van de beheerde code die wordt uitgevoerd als onderdeel van SOS in het foutopsporingsprogramma (lldb). De runtime moet ten minste versie 2.1.0 of hoger zijn. Als er spaties in de map staan, moet deze één aan citeren (').

Normaal gesproken probeert SOS een geïnstalleerde .NET-runtime te vinden om de beheerde code automatisch uit te voeren, maar deze opdracht is beschikbaar als deze mislukt. De standaardinstelling is om dezelfde runtime (libcoreclr) te gebruiken die wordt opgespoord. Gebruik deze opdracht als de standaardruntime die wordt opgespoord, niet voldoende werkt om de SOS-code uit te voeren of als de versie kleiner is dan 2.1.0.

Als u het volgende foutbericht hebt ontvangen bij het uitvoeren van een SOS-opdracht, gebruikt u deze opdracht om het pad in te stellen op 2.1.0 of hoger .NET Runtime.

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

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

U kunt de 'dotnet --info' in een opdrachtshell gebruiken om het pad van een geïnstalleerde .NET-runtime te vinden.
SetSymbolServer [-ms] [-disable] [-log] [-loadsymbols] [-cache<cache-path>] [-directory<search-directory>] [-sympath<windows-symbol-path>] [<symbol-server-URL>] Hiermee schakelt u de ondersteuning voor het downloaden van de symboolserver in.

Met de optie -ms kunt u downloaden van de openbare Microsoft-symboolserver.

Met de optie -disable wordt de ondersteuning voor het downloaden van symbolen ingeschakeld.

Met de optie -cachecachepad<> wordt een symboolcachemap opgegeven. De standaardwaarde is $HOME/.dotnet/symbolcache als deze niet is opgegeven.

Met de optie -directory wordt een pad toegevoegd om te zoeken naar symbolen. Kan meer dan één zijn.

Met de optie -sympath worden server-, cache- en mappaden toegevoegd in de indeling van het Windows-symboolpad.

Met de optie -log kunt u logboekregistratie voor symbooldownloads inschakelen.

De optie -loadsymbols probeert de systeemeigen .NET-symbolen voor de runtime te downloaden. Ondersteund op lldb en dotnet-dump.
SOSFlush Hiermee wordt een interne SOS-cache leeggemaakt.
SOSStatus [-reset] Hiermee geeft u de interne SOS-status weer of stelt u de interne status in de cache opnieuw in.
StopOnException [-afgeleide] [-create-create2 | ] <Uitzondering><Pseudo-registernummer> Zorgt ervoor dat het foutopsporingsprogramma stopt wanneer de opgegeven uitzondering wordt gegenereerd, maar om door te gaan wanneer andere uitzonderingen worden gegenereerd.

De -afgeleide optie onderschept de opgegeven uitzondering en elke uitzondering die is afgeleid van de opgegeven uitzondering.

Alleen ondersteund met Windbg.
SyncBlk [-all | <syncblk number>] Geeft de opgegeven SyncBlock structuur of alle SyncBlock structuren weer. Als u geen argumenten doorgeeft, geeft de opdracht SyncBlk de SyncBlock structuur weer die overeenkomt met objecten die eigendom zijn van een thread.

Een SyncBlock structuur is een container voor extra informatie die niet hoeft te worden gemaakt voor elk object. Het kan COM-gegevens, hashcodes en vergrendelingsinformatie bevatten voor thread-veilige bewerkingen.
ThreadPool Geeft informatie weer over de beheerde threadgroep, inclusief het aantal werkaanvragen in de wachtrij, het aantal voltooiingspoortthreads en het aantal timers.
Threads (clrthreads) [-live] [-special] Geeft alle beheerde threads in het proces weer.

Met de opdracht Threads wordt de shorthand-id van het foutopsporingsprogramma, de CLR-thread-id en de thread-id van het besturingssysteem weergegeven. Daarnaast geeft de opdracht Threads een domeinkolom weer die het toepassingsdomein aangeeft waarin een thread wordt uitgevoerd, een APT-kolom die de COM-appartementsmodus weergeeft en een uitzonderingskolom waarin de laatste uitzondering wordt weergegeven die in de thread is opgetreden.

Met de optie -live worden threads weergegeven die zijn gekoppeld aan een live-thread.

Met de optie -special worden alle speciale threads weergegeven die zijn gemaakt door de CLR. Speciale threads zijn threads voor garbagecollection (in gelijktijdige en server garbagecollection), helperthreads voor foutopsporingsprogramma's, finalizer-threads, AppDomain het verwijderen van threads en timerthreads voor threadgroepen.
Waardeveld ThreadState State <> Geeft de status van de thread weer. De value parameter is de waarde van het veld in de uitvoer van het Statethreads-rapport .
Token2EE-modulenaamtoken<><> Hiermee wordt het opgegeven metagegevenstoken in de opgegeven module omgezet in een MethodTable structuur of MethodDesc structuur.

U kunt de parameter voor de modulenaam doorgeven * om te vinden waarnaar dat token is toegewezen in elke geladen beheerde module. U kunt ook de naam van het foutopsporingsprogramma doorgeven voor een module, zoals mscorlib of image00400000.
U [-gcinfo] [-ehinfo] [-n] <MethodDesc-adres | <>Codeadres> Geeft een geannoteerde demontage van een beheerde methode weer die is opgegeven door een MethodDesc structuuraanwijzer voor de methode of door een codeadres in de hoofdtekst van de methode. Met de U-opdracht wordt de hele methode van begin tot eind weergegeven, met aantekeningen die metagegevenstokens converteren naar namen.

De optie -gcinfo zorgt ervoor dat de U-opdracht de GCInfo structuur voor de methode weergeeft.

Met de optie -ehinfo worden uitzonderingsinformatie voor de methode weergegeven. U kunt deze informatie ook verkrijgen met de opdracht EHInfo .

Met de optie -n wordt de weergave van bronbestandsnamen en regelnummers uitgeschakeld. Als het foutopsporingsprogramma de optie heeft SYMOPT_LOAD_LINES opgegeven, zoekt SOS de symbolen voor elk beheerd frame op en geeft, indien geslaagd, de bijbehorende bronbestandsnaam en het bijbehorende regelnummer weer. U kunt de optie -n opgeven om dit gedrag uit te schakelen.
VerifyHeap Controleert de garbagecollection heap op tekenen van beschadiging en geeft eventuele gevonden fouten weer.

Heap-beschadigingen kunnen worden veroorzaakt door aanroepen van platformaanroepen die onjuist zijn samengesteld.
Objectadres van VerifyObj<> Controleert het object dat wordt doorgegeven als argument voor tekenen van beschadiging. Alleen ondersteund in Windows.
VMMap Doorkruist de virtuele adresruimte en geeft het type beveiliging weer dat op elke regio wordt toegepast. Alleen ondersteund met Windbg.
VMStat Biedt een overzichtsweergave van de virtuele adresruimte, gesorteerd op elk type beveiliging dat op dat geheugen wordt toegepast (gratis, gereserveerd, vastgelegd, privé, toegewezen, installatiekopie). De kolom TOTAL geeft het resultaat weer van de kolom GEMIDDELDE vermenigvuldigd met de kolom BLK COUNT. Alleen ondersteund met Windbg.

Dotnet-Dump

Zie dotnet-dump voor een lijst met beschikbare SOS-opdrachten met.dotnet-dump analyze

Windows Debugger

U kunt ook de SOS-foutopsporingsextensie gebruiken door deze te laden in het WinDbg-/cmdlet-foutopsporingsprogramma en opdrachten uit te voeren in het Windows-foutopsporingsprogramma. SOS-opdrachten kunnen worden gebruikt voor liveprocessen of dumps.

Windbg moet de SOS-extensie automatisch laden wanneer het proces dat wordt opgespoord, de .NET-runtime bevat (coreclr.dll of libcoreclr.so).

LLDB-foutopsporingsprogramma

Zie dotnet-sos voor instructies over het configureren van SOS voor LLDB. SOS-opdrachten kunnen worden gebruikt voor liveprocessen of dumps.

Standaard kunt u alle SOS-opdrachten bereiken door het volgende in te voeren: sos [command_name]. De algemene opdrachten zijn echter aliassen, zodat u het sos voorvoegsel niet nodig hebt:

Opdracht Functie
analyzeoom Geeft de informatie weer van de laatste OOM die is opgetreden bij een toewijzingsaanvraag voor de GC-heap.
bpmd Hiermee maakt u een onderbrekingspunt bij de opgegeven beheerde methode in de opgegeven module.
clrmodules Geeft een lijst weer van de beheerde modules in het proces.
clrstack Biedt alleen een stacktracering van beheerde code.
clrthreads Geeft een lijst weer van de beheerde threads die worden uitgevoerd.
clru Geeft een geannoteerde demontage van een beheerde methode weer.
dbgout Hiermee schakelt u () interne SOS-logboekregistratie in-off of uit.
dso Geeft alle beheerde objecten weer die binnen de grenzen van de huidige stack zijn gevonden.
dumpalc Geeft details weer over een collectible AssemblyLoadContext waarnaar het opgegeven object wordt geladen.
dumparray Geeft details weer over een beheerde matrix.
dumpasync Geeft informatie weer over asynchrone statusmachines op de door garbage verzamelde heap.
dumpassembly Geeft details weer over een assembly.
dumpclass Geeft informatie weer over de EEClass structuur op het opgegeven adres.
dumpconcurrentdictionary Geeft gelijktijdige woordenlijstinhoud weer.
dumpconcurrentqueue Geeft gelijktijdige wachtrijinhoud weer.
dumpdelegate Geeft informatie weer over een gemachtigde.
dumpdomain Geeft informatie weer over de alle assembly's binnen alle AppDomains of de opgegeven.
dumpgcdata Geeft informatie weer over de GC-gegevens.
dumpgen Geeft heap-inhoud weer voor de opgegeven generatie.
dumpheap Geeft informatie weer over de verzamelde heap- en verzamelingsstatistieken over objecten.
dumpil Geeft de algemene tussenliggende taal (CIL) weer die is gekoppeld aan een beheerde methode.
dumplog Hiermee schrijft u de inhoud van een stresslogboek in het geheugen naar het opgegeven bestand.
dumpmd Geeft informatie weer over de MethodDesc structuur op het opgegeven adres.
dumpmodule Geeft informatie weer over de module op het opgegeven adres.
dumpmt Geeft informatie weer over de methodetabel op het opgegeven adres.
dumpobj Geeft informatie weer over het object op het opgegeven adres.
dumpruntimetypes Hiermee vindt u alle System.RuntimeType-objecten in de GC-heap en worden ook de typenaam en MethodTable afgedrukt.
dumpsig Dumpt de handtekening van een methode of veld dat is opgegeven door <sigaddr> <moduleaddr>.
dumpsigelem Dumpt één element van een handtekeningobject.
dumpstack Geeft een systeemeigen en beheerde stacktracering weer.
dumpstackobjects Geeft alle beheerde objecten weer die binnen de grenzen van de huidige stack zijn gevonden.
dumpvc Geeft informatie weer over de velden van een waardeklasse.
eeheap Geeft informatie weer over procesgeheugen dat wordt verbruikt door interne runtimegegevensstructuren.
eestack Wordt dumpstack uitgevoerd op alle threads in het proces.
eeversion Geeft informatie weer over de runtime- en SOS-versies.
ehinfo Geeft de afhandelingsblokken voor uitzonderingen weer in een JIT-methode.
finalizequeue Geeft alle objecten weer die zijn geregistreerd voor de voltooien.
findappdomain Probeert het AppDomain van een GC-object op te lossen.
findroots Objectwortels zoeken en weergeven in GC-verzamelingen.
gchandles Geeft statistieken weer over garbagecollection-ingangen in het proces.
gcheapstat Geeft statistieken weer over garbagecollection.
gcinfo Geeft de JIT GC-codering voor een methode weer.
gcroot Geeft informatie weer over verwijzingen (of wortels) naar het object op het opgegeven adres.
gcwhere Geeft de locatie weer in de GC-heap van het opgegeven adres.
histclear Publiceert alle resources die worden gebruikt door de familie van Hist-opdrachten.
histinit Initialiseert de SOS-structuren uit het stresslogboek dat is opgeslagen in de foutopsporing.
histobj Onderzoekt alle herlocatierecords van stresslogboeken en toont de keten van garbagecollectionverplaatsingen die mogelijk hebben geleid tot het adres dat als argument is doorgegeven.
histobjfind Geeft alle logboekvermeldingen weer die verwijzen naar het object op het opgegeven adres.
histroot Geeft informatie weer met betrekking tot zowel promoties als verplaatsingen van de opgegeven hoofdmap.
histstats Geeft stresslogboekstatistieken weer.
ip2md Geeft de MethodDesc structuur weer op het opgegeven adres in code die is gecompileerd met JIT.
listnearobj Geeft het object dat voorafgaat aan en het opgegeven adres slaagt.
loadsymbols Laadt de systeemeigen .NET-modulesymbolen.
logging Hiermee schakelt u interne SOS-logboekregistratie in of uit.
name2ee Geeft de MethodTable en EEClass structuren weer voor het opgegeven type of de opgegeven methode in de opgegeven module.
objsize Geeft de grootte van het opgegeven object weer.
parallelstacks Geeft de samengevoegde threadsstack op dezelfde manier weer als het deelvenster 'Parallelle stacks' van Visual Studio.
pathto Geeft het GC-pad van <root> naar <target>.
pe Hiermee worden velden weergegeven en opgemaakt van een object dat is afgeleid van de Exception klasse op het opgegeven adres.
printexception Hiermee worden velden weergegeven en opgemaakt van een object dat is afgeleid van de Exception klasse op het opgegeven adres.
runtimes Geeft een lijst weer van de runtimes in het doel of wijzig de standaardruntime.
stoponcatch Het doelproces wordt verbroken wanneer er de volgende keer een beheerde uitzondering wordt opgevangen tijdens de uitvoering.
setclrpath Hiermee stelt u het pad in om coreclr dac/dbi-bestanden te laden. setclrpath <path>.
sethostruntime Hiermee stelt u de .NET-runtimemap in die moet worden gebruikt voor het uitvoeren van beheerde code in SOS.
setsymbolserver Hiermee schakelt u de ondersteuning van de symboolserver in.
setsostid Hiermee stelt u de huidige tid/thread-index van het besturingssysteem in in plaats van de lldb-index te gebruiken. setsostid <tid> <index>.
sos Voert verschillende coreclr-foutopsporingsopdrachten uit. Gebruik de syntaxis sos <command-name> <args>. Zie 'soshelp' voor meer informatie.
soshelp Geeft alle beschikbare opdrachten weer wanneer er geen parameter is opgegeven of geeft gedetailleerde Help-informatie weer over de opgegeven opdracht: soshelp <command>.
syncblk Geeft de informatie van de SyncBlock-houder weer.
taskstate Geeft een taakstatus weer in een door mensen leesbare indeling.
threadpool Geeft informatie weer over de runtime-threadgroep.
threadpoolqueue Hiermee worden werkitems in de wachtrij geplaatste threadpool weergegeven.
threadstate Vrij drukt de betekenis van een threadsstatus af.
timerinfo Geeft informatie weer over het uitvoeren van timers.
token2ee Geeft de MethodTable-structuur en MethodDesc-structuur weer voor het opgegeven token en de opgegeven module.
traverseheap Schrijft heapgegevens naar een bestand in een indeling die wordt begrepen door de CLR Profiler.
verifyheap Controleert de GC heap op tekenen van corruptie.
verifyobj Controleert het object dat wordt doorgegeven als argument voor tekenen van beschadiging.

Voorbeeldgebruik van Windbg/cdb

Opdracht Beschrijving
!dumparray -start 2 -length 5 -details 00ad28d0 Geeft de inhoud van een matrix weer op het adres 00ad28d0. De weergave begint vanaf het tweede element en gaat door met vijf elementen.
!dumpassembly 1ca248 Geeft de inhoud van een assembly op het adres 1ca248weer.
!dumpheap Geeft informatie weer over de garbagecollection heap.
!DumpLog Hiermee schrijft u de inhoud van het stresslogboek in het geheugen naar een (standaard) bestand met de naam StressLog.txt in de huidige map.
!dumpmd 902f40 Geeft de MethodDesc structuur op het adres 902f40weer.
!dumpmodule 1caa50 Geeft informatie weer over een module op het adres 1caa50.
!DumpObj a79d40 Geeft informatie weer over een object op het adres a79d40.
!DumpVC 0090320c 00a79d9c Geeft de velden van een waardeklasse op het adres 00a79d9c weer met behulp van de methodetabel op het adres 0090320c.
!eeheap -Gc Geeft het procesgeheugen weer dat door de garbagecollector wordt gebruikt.
!finalizequeue Geeft alle objecten weer die zijn gepland voor de afronding.
!findappdomain 00a79d98 Bepaalt het toepassingsdomein van een object op het adres 00a79d98.
!gcinfo 5b68dbb8 Geeft alle garbagecollectiongrepen in het huidige proces weer.
!name2ee unittest.exe MainClass.Main Geeft de MethodTable en EEClass structuren weer voor de Main methode in de klasse MainClass in de module unittest.exe.
!token2ee unittest.exe 02000003 Geeft informatie weer over het metagegevenstoken op het adres 02000003 in de module unittest.exe.

LLDB-voorbeeldgebruik

Opdracht Beschrijving
dumparray -start 2 -length 5 -details 00ad28d0 Geeft de inhoud van een matrix weer op het adres 00ad28d0. De weergave begint vanaf het tweede element en gaat door met vijf elementen.
dumpassembly 1ca248 Geeft de inhoud van een assembly op het adres 1ca248weer.
dumpheap Geeft informatie weer over de garbagecollection heap.
dumplog Hiermee schrijft u de inhoud van het stresslogboek in het geheugen naar een (standaard) bestand met de naam StressLog.txt in de huidige map.
dumpmd 902f40 Geeft de MethodDesc structuur op het adres 902f40weer.
dumpmodule 1caa50 Geeft informatie weer over een module op het adres 1caa50.
dumpobj a79d40 Geeft informatie weer over een object op het adres a79d40.
dumpvc 0090320c 00a79d9c Geeft de velden van een waardeklasse op het adres 00a79d9c weer met behulp van de methodetabel op het adres 0090320c.
eeheap -gc Geeft het procesgeheugen weer dat door de garbagecollector wordt gebruikt.
findappdomain 00a79d98 Bepaalt het toepassingsdomein van een object op het adres 00a79d98.
gcinfo 5b68dbb8 Geeft alle garbagecollectiongrepen in het huidige proces weer.
name2ee unittest.exe MainClass.Main Geeft de MethodTable en EEClass structuren weer voor de Main methode in de klasse MainClass in de module unittest.exe.
token2ee unittest.exe 02000003 Geeft informatie weer over het metagegevenstoken op het adres 02000003 in de module unittest.exe.
clrthreads Geeft de beheerde threads weer.

Zie ook