Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Ez a cikk a következő verziókra vonatkozik: ✔️ dotnet-trace 9.0.661903 és újabb verziók
Telepítés
Kétféleképpen tölthető le és telepíthető dotnet-trace:
dotnet globális eszköz:
A NuGet-csomag legújabb kiadási verziójának
dotnet-tracetelepítéséhez használja a dotnet eszköz telepítési parancsát:dotnet tool install --global dotnet-traceKözvetlen letöltés:
Töltse le a platformnak megfelelő végrehajtható eszközt:
Operációs rendszer Plattform Windows Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
Szinopszis
dotnet-trace [-h, --help] [--version] <command>
Leírás
Az dotnet-trace eszköz:
Platformfüggetlen .NET Core-eszköz.
Lehetővé teszi egy futó folyamat .NET Core-nyomkövetéseinek gyűjtését natív profilkészítő nélkül.
A .NET Core-futtatókörnyezetre
EventPipeépül.A nyomkövetések gyűjtésének két különböző módját támogatja:
- Az
collectige konzisztens funkciókat kínál bármely operációs rendszeren. - Az
collect-linuxige Linux-specifikus operációsrendszer-képességeket használ további funkciók biztosításához.
Tulajdonság collectcollect-linuxTámogatott operációs rendszer Bármely Csak Linux, kernelverzió >= 6.4 Rendszergazdai/gyökérjogosítványt igényel Nem Igen Az összes folyamat nyomon követése egyidejűleg Nem Támogatott Natív kódtár- és kernelesemények rögzítése Nem Támogatott Az eseményhívások natív kereteket tartalmaznak Nem Igen - Az
Beállítások
-h|--helpParancssori súgót jelenít meg.
--versionMegjeleníti a dotnet-trace segédprogram verzióját.
Parancsok
| Parancs |
|---|
| dotnet-trace collect |
| dotnet-trace collect-linux |
| dotnet-trace konvertálás |
| dotnet-trace ps |
| dotnet-trace list-profiles |
| dotnet-trace jelentés |
dotnet-trace collect
Diagnosztikai nyomkövetést gyűjt egy futó folyamatból, vagy elindít egy gyermekfolyamatot, és nyomon követi azt (.NET 5 vagy újabb). Ha azt szeretné, hogy az eszköz futtasson egy gyermekfolyamatot, és nyomon kövesse azt az indításkor, fűzze hozzá -- a collect parancshoz.
Szinopszis
dotnet-trace collect
[--buffersize <size>]
[--clreventlevel <clreventlevel>]
[--clrevents <clrevents>]
[--dsrouter <ios|ios-sim|android|android-emu>]
[--format <Chromium|NetTrace|Speedscope>]
[-h|--help]
[--duration dd:hh:mm:ss]
[-n, --name <name>]
[--diagnostic-port]
[-o|--output <trace-file-path>]
[-p|--process-id <pid>]
[--profile <list-of-comma-separated-profile-names>]
[--providers <list-of-comma-separated-providers>]
[-- <command>] (for target applications running .NET 5 or later)
[--show-child-io]
[--resume-runtime]
[--stopping-event-provider-name <stoppingEventProviderName>]
[--stopping-event-event-name <stoppingEventEventName>]
[--stopping-event-payload-filter <stoppingEventPayloadFilter>]
Beállítások
--buffersize <size>A memóriabeli puffer méretét megabájtban állítja be. Alapértelmezett 256 MB.
Feljegyzés
Ha a célfolyamat gyorsabban bocsát ki eseményeket, mint amennyit a lemezre írhat, a puffer túlcsordulhat, és egyes eseményeket elvethet. Ezt a problémát a puffer méretének növelésével vagy a rögzítendő események számának csökkentésével háríthatja el.
--clreventlevel <clreventlevel>A kibocsátandó CLR-események részletessége. Ez a beállítás csak akkor érvényes, ha
--clreventsa beállítás meg van adva, és nem bírálja--profilefelül vagy--providersfelül. Az alábbi táblázat az elérhető eseményszinteket mutatja be.Sztring Számérték logalways0critical1error2warning3informational4verbose5--clrevents <clrevents>A CLR-futtatókörnyezet-szolgáltató kulcsszavainak listája, amelyeket jelek választanak el egymástól
+. Ez egy egyszerű leképezés, amellyel sztring aliasok használatával adhat meg esemény kulcsszavakat a hexa értékek helyett. Például ugyanazt az eseménykészletet kéri le,dotnet-trace collect --providers Microsoft-Windows-DotNETRuntime:3:4mint adotnet-trace collect --clrevents gc+gchandle --clreventlevel informational. Ha a CLR-futtatókörnyezet-szolgáltatóMicrosoft-Windows-DotNETRuntimeis engedélyezve--providersvan, a--profilerendszer figyelmen kívül hagyja ezt a beállítást. Az alábbi táblázat az elérhető kulcsszavak listáját mutatja:Kulcsszósztring aliasa Kulcsszó hexa értéke gc0x1gchandle0x2assemblyloader0x4loader0x8jit0x10ngen0x20startenumeration0x40endenumeration0x80security0x400appdomainresourcemanagement0x800jittracing0x1000interop0x2000contention0x4000exception0x8000threading0x10000jittedmethodiltonativemap0x20000overrideandsuppressngenevents0x40000type0x80000gcheapdump0x100000gcsampledobjectallocationhigh0x200000gcheapsurvivalandmovement0x400000managedheapcollect0x800000gcheapandtypenames0x1000000gcsampledobjectallocationlow0x2000000perftrack0x20000000stack0x40000000threadtransfer0x80000000debugger0x100000000monitoring0x200000000codesymbols0x400000000eventsource0x800000000compilation0x1000000000compilationdiagnostic0x2000000000methoddiagnostic0x4000000000typediagnostic0x8000000000jitinstrumentationdata0x10000000000profiler0x20000000000waithandle0x40000000000allocationsampling0x80000000000A CLR-szolgáltatóról részletesebben a .NET futtatókörnyezet-szolgáltató referenciadokumentációjában olvashat.
'--dsrouter {ios|ios-sim|android|android-emu}
Elindítja a dotnet-dsroutert , és csatlakozik hozzá. A dotnet-dsrouter telepítéséhez szükséges. További információkért futtassa
dotnet-dsrouter -h.--format {Chromium|NetTrace|Speedscope}Beállítja a nyomkövetési fájl konvertálásának kimeneti formátumát. Az alapértelmezett érték
NetTrace.-n, --name <name>Annak a folyamatnak a neve, amelyből a nyomkövetést gyűjti.
Feljegyzés
Linuxon és macOS rendszeren a beállítás használatához a célalkalmazásra van szükség, és
dotnet-traceugyanaztTMPDIRa környezeti változót kell használnia. Ellenkező esetben a parancs időtúllépést fog végrehajtani.--diagnostic-port <port-address[,(listen|connect)]>Beállítja a nyomon követendő folyamattal való kommunikációhoz használt diagnosztikai portot . A dotnet-trace-nek és a célfolyamaton belüli .NET-futtatókörnyezetnek meg kell egyeznie a portcímmel, az egyik figyeléssel, a másik pedig a csatlakozással. A dotnet-trace automatikusan meghatározza a megfelelő portot, amikor a
--process-idbeállításokat használja--name, vagy amikor elindít egy folyamatot a-- <command>beállítással. Általában csak akkor kell explicit módon megadni a portot, ha olyan folyamatra vár, amely a jövőben indul el, vagy egy olyan folyamat felé való kommunikációhoz, amely egy olyan tárolón belül fut, amely nem része az aktuális folyamatnévtérnek.Az
port-addressoperációs rendszer különbségei:- Linux és macOS – a Unix-tartomány szoftvercsatornáinak elérési útja, például
/foo/tool1.socket. - Windows – egy elnevezett cső elérési útja, például
\\.\pipe\my_diag_port1. - Android, iOS és tvOS – ip:port, például
127.0.0.1:9000.
Alapértelmezés szerint
dotnet-tracea megadott címen figyel. Ehelyett a cím után hozzáfűzvedotnet-tracekérheti,connecta csatlakozást. Például csatlakozik egy .NET-futtatókörnyezeti folyamathoz,--diagnostic-port /foo/tool1.socket,connectamely a Unix-tartomány szoftvercsatornát/foo/tool1.socketfigyeli.Ha meg szeretné tudni, hogyan gyűjthet nyomkövetést az alkalmazásindításból, olvassa el a Diagnosztikai port használata az alkalmazás indítási nyomkövetésének gyűjtéséhez című témakört.
- Linux és macOS – a Unix-tartomány szoftvercsatornáinak elérési útja, például
--duration <time-to-run>A nyomkövetés futtatásának ideje. Használja a
dd:hh:mm:ssformátumot. Például00:00:00:055 másodpercig futtatja.-o|--output <trace-file-path>Az összegyűjtött nyomkövetési adatok kimeneti elérési útja. Ha nincs megadva, alapértelmezés szerint a következő lesz
<appname>_<yyyyMMdd>_<HHmmss>.nettrace: "myapp_20210315_111514.nettrace".-p|--process-id <PID>A nyomkövetést összegyűjtő folyamatazonosító.
Feljegyzés
Linuxon és macOS rendszeren a beállítás használatához a célalkalmazásra van szükség, és
dotnet-traceugyanaztTMPDIRa környezeti változót kell használnia. Ellenkező esetben a parancs időtúllépést fog végrehajtani.--profile <list-of-comma-separated-profile-names>A profilok a gyakori nyomkövetési forgatókönyvek szolgáltatói konfigurációinak előre definiált készletei. Egyszerre több profil is megadható, vesszővel elválasztva. A profil konfigurációjának felülbírálásával
--providerskonfigurált szolgáltatók. Hasonlóképpen, ha bármelyik profil konfigurálja a CLR futtatókörnyezet-szolgáltatót, az felülírja a megadott--clreventskonfigurációkat.Amikor
--profile,--providersés--clreventsaz összes hiányzik, engedélyezi a profilokatdotnet-trace collect,dotnet-commonésdotnet-sampled-thread-timealapértelmezés szerint.Elérhető profilok:
Profil Leírás dotnet-commonKönnyű .NET futtatókörnyezeti diagnosztikák, amelyeket úgy terveztek, hogy alacsony terhelést okoznak.
GC, AssemblyLoader, Loader, JIT, Exceptions, Threading, JittedMethodILToNativeMap és Fordítási eseményeket tartalmaz
Egyenértékű--providers "Microsoft-Windows-DotNETRuntime:0x100003801D:4".dotnet-sampled-thread-time.NET-szálvermeket (~100 Hz) használ a hotspotok időbeli azonosításához. A futtatókörnyezeti mintaprofilozót használja felügyelt veremekkel. gc-verboseNyomon követi a GC-gyűjteményeket és -mintákat az objektumfoglalásokon. gc-collectA GC-gyűjteményeket csak nagyon alacsony terhelés mellett követi nyomon. databaseRögzíti a ADO.NET és az Entity Framework adatbázis-parancsait. Feljegyzés
A dotnet-trace eszköz korábbi verzióiban a collect verb egy úgynevezett
cpu-samplingprofilt támogatott. Ez a profil azért lett eltávolítva, mert a név félrevezető volt. A processzorhasználattól függetlenül mintát vett az összes szálból. Most már hasonló eredményt érhet el a következő használatával--profile dotnet-sampled-thread-time,dotnet-common: . Ha pontosan meg kell egyeznie az előzőcpu-samplingviselkedésével, használja a .--profile dotnet-sampled-thread-time --providers "Microsoft-Windows-DotNETRuntime:0x14C14FCCBD:4"--providers <list-of-comma-separated-providers>Az engedélyezendő szolgáltatók vesszővel tagolt listája
EventPipe. Ezek a szolgáltatók kiegészítik azokat a szolgáltatókat, amelyeket a--profile <list-of-comma-separated-profile-names>. Ha van inkonzisztenciája egy adott szolgáltatónak, ez a konfiguráció elsőbbséget élvez az implicit konfigurációval--profile--clreventsszemben.A szolgáltatók listája a következő formában
Provider[,Provider]jelenik meg:-
Providera következő formában van:KnownProviderName[:Flags[:Level[:KeyValueArgs]]] -
KeyValueArgsa következő formában van:[key1=value1][;key2=value2]
Ha többet szeretne megtudni a .NET ismert szolgáltatóiról, tekintse meg a jól ismert eseményszolgáltatókat.
-
-- <command>(.NET 5 vagy újabb verziót futtató célalkalmazások esetén)A gyűjteménykonfigurációs paraméterek után a felhasználó hozzáfűzhet
--egy parancsot, amellyel elindíthat egy .NET-alkalmazást legalább 5.0-s futtatókörnyezettel. Ez hasznos lehet a folyamat korai szakaszában előforduló problémák diagnosztizálásakor, például az indítási teljesítménysel vagy a szerelvénybetöltő és a kötőanyag hibáival kapcsolatban.Feljegyzés
Ezzel a beállítással figyeli az első .NET-folyamatot, amely visszakomlik az eszközhöz, ami azt jelenti, hogy ha a parancs több .NET-alkalmazást indít el, az csak az első alkalmazást fogja összegyűjteni. Ezért javasoljuk, hogy használja ezt a lehetőséget önálló alkalmazásokban, vagy használja a
dotnet exec <app.dll>lehetőséget.--show-child-ioEgy elindított gyermekfolyamat bemeneti és kimeneti adatfolyamait jeleníti meg az aktuális konzolon.
--resume-runtimeA munkamenet inicializálása után folytassa a futtatókörnyezetet, alapértelmezés szerint igaz lesz. Tiltsa le a futtatókörnyezet folytatását a --resume-runtime:false paranccsel.
--stopping-event-provider-nameEgy másként értelmezett sztring, amely leállítja a nyomkövetést, amikor egy egyező szolgáltatónévvel rendelkező eseményt ér el. Egy konkrétabb leállítási eseményhez adja meg és/vagy
--stopping-event-event-nameadja meg--stopping-event-payload-filtera következőt: Például--stopping-event-provider-name Microsoft-Windows-DotNETRuntimea nyomkövetés leállítása az eseményszolgáltató általMicrosoft-Windows-DotNETRuntimekibocsátott első esemény lenyomásakor.--stopping-event-event-nameEgy másként értelmezett sztring, amely leállítja a nyomkövetést, amikor egy eseményt a megfelelő eseménynévvel ér el. Be
--stopping-event-provider-namekell állítani. Egy konkrétabb leállítási eseményhez adja meg--stopping-event-payload-filtera . Például--stopping-event-provider-name Microsoft-Windows-DotNETRuntime --stopping-event-event-name Method/JittingStarteda nyomkövetés leállítása az eseményszolgáltató általMethod/JittingStartedkibocsátott elsőMicrosoft-Windows-DotNETRuntimeesemény lenyomásakor.--stopping-event-payload-filterVesszővel elválasztott [payload_field_name]:[payload_field_value] párként értelmezett sztring, amely az összes megadott hasznos adatpárt tartalmazó esemény lenyomásakor leállítja a nyomkövetést. Szükség van
--stopping-event-provider-namea beállításra és--stopping-event-event-namea beállításra. például--stopping-event-provider-name Microsoft-Windows-DotNETRuntime --stopping-event-event-name Method/JittingStarted --stopping-event-payload-filter MethodNameSpace:Program,MethodName:OnButtonClickaz eseményszolgáltató által kibocsátott névtérbenMethod/JittingStartedlévő metódusOnButtonClickelsőProgrameseményének nyomkövetésénekMicrosoft-Windows-DotNETRuntimeleállítása.
Feljegyzés
- A nyomkövetés leállítása hosszú időt (akár perceket) is igénybe vehet a nagy alkalmazások esetében. A futtatókörnyezetnek át kell küldenie a típusgyorsítótárat a nyomkövetésben rögzített összes felügyelt kódhoz.
- A nyomkövetést a célfolyamatot
dotnet-tracefuttató felhasználóval azonos felhasználóként vagy gyökérként kell futtatni. Ellenkező esetben az eszköz nem fog kapcsolatot létesíteni a célfolyamattal.
- Ha futás
dotnet-trace collectközben kezeletlen kivételt tapasztal, az hiányos nyomkövetést eredményez. Ha a kivétel kiváltó okának megkeresése a prioritás, keresse meg az összeomláskor található memóriaképek gyűjtését. A kezeletlen kivétel miatt a rendszer csonkolja a nyomkövetést, amikor a futtatókörnyezet leáll, hogy megakadályozza az egyéb nem kívánt viselkedést, például lefagyást vagy adatsérülést. Annak ellenére, hogy a nyomkövetés hiányos, továbbra is megnyithatja, hogy lássa, mi történt a hibához vezetően. Hiányoznak azonban a lefutási adatok (ez a nyomkövetés végén történik), így a veremek feloldatlanok lehetnek (attól függően, hogy a szolgáltatók milyen szolgáltatókat kapcsoltak be). Nyissa meg a nyomkövetést a PerfView parancssori jelölővel történő végrehajtásával/ContinueOnError. A naplók tartalmazzák a kivétel aktivált helyét is.
- Ha a beállításokon keresztül
--stopping-event-*ad meg egy leállási eseményt, mivel az EventStream aszinkron módon van elemezve, a megadott leállási esemény beállításainak megfelelő nyomkövetési esemény elemzése és az EventPipeSession leállítása között lesznek események.
dotnet-trace collect-linux
Feljegyzés
Az collect-linux ige egy új előzetes verziójú funkció, amely a .nettrace fájlformátum frissített verziójára támaszkodik. A legújabb PerfView-kiadás támogatja ezeket a nyomkövetési fájlokat, de a nyomkövetési fájl egyéb módjai, például convert és report, még nem működnek.
Diagnosztikai nyomkövetéseket gyűjt perf_events linuxos operációsrendszer-technológiával.
collect-linuxlehetővé teszi a következő további funkciókat.collect
| Tulajdonság | collect |
collect-linux |
|---|---|---|
| Támogatott operációs rendszer | Bármely | Csak Linux, kernelverzió >= 6.4 |
| Rendszergazdai/gyökérjogosítványt igényel | Nem | Igen |
| Az összes folyamat nyomon követése egyidejűleg | Nem | Támogatott |
| Natív kódtár- és kernelesemények rögzítése | Nem | Támogatott |
| Az eseményhívások natív kereteket tartalmaznak | Nem | Igen |
Előfeltételek
- Linux kernel támogatással
CONFIG_USER_EVENTS=y(kernel 6.4+) - Gyökérengedélyek
- .NET 10+
Feljegyzés
Az collect-linux ige csak a 2.35-ös vagy újabb glibc-verziójú Linux x64- és Linux Arm64-környezeteken fut.
A .NET 10 hivatalos linuxos disztribúciói támogatják ezt a követelményt, kivéve az Alpine 3.22-t, a CentOS Stream 9-et és a Red Hat Enterprise Linux 9-en alapuló disztribúciókat.
A rendszer libc-verziójának ellenőrzésének gyors módja a parancs ldd --version vagy a libc-kódtár közvetlen végrehajtása.
Szinopszis
dotnet-trace collect-linux
[-h|--help]
# Provider/Event Specification
[--providers <list-of-comma-separated-providers>]
[--clreventlevel <clreventlevel>]
[--clrevents <clrevents>]
[--perf-events <list-of-perf-events>]
[--profile <list-of-comma-separated-profile-names>]
# Trace Collection
[-o|--output <trace-file-path>]
[--duration dd:hh:mm:ss]
# .NET Process Target (Optional)
[-n, --name <name>]
[-p|--process-id <pid>]
# Probe mode
[--probe]
A gyűjtemény alapértelmezett viselkedése
Ha --providersa , --profile, --clrevents, és --perf-events nincs megadva, collect-linux alapértelmezés szerint engedélyezi ezeket a profilokat:
-
dotnet-common– egyszerűsített .NET-futtatókörnyezet-diagnosztika. -
cpu-sampling– kernel CPU-mintavételezése.
Alapértelmezés szerint a rendszer a gépen lévő összes folyamatot nyomon követi. Ha csak egy folyamatot szeretne nyomon követni, használja -n, --name <name> vagy -p|--process-id <PID>.
Beállítások
Szolgáltatói/eseményspecifikációs beállítások
--providers <list-of-comma-separated-providers>Az engedélyezendő szolgáltatók vesszővel tagolt listája
EventPipe. Ezek a szolgáltatók kiegészítik azokat a szolgáltatókat, amelyeket a--profile <list-of-comma-separated-profile-names>. Ha van inkonzisztenciája egy adott szolgáltatónak, ez a konfiguráció elsőbbséget élvez az implicit konfigurációval--profile--clreventsszemben.A szolgáltatók listája a következő formában
Provider[,Provider]jelenik meg:-
Providera következő formában van:KnownProviderName[:Flags[:Level[:KeyValueArgs]]] -
KeyValueArgsa következő formában van:[key1=value1][;key2=value2]
A .NET néhány jól ismert szolgáltatójáról további információt a jól ismert eseményszolgáltatók című témakörben talál.
-
--clreventlevel <clreventlevel>A kibocsátandó CLR-események részletessége. Ez a beállítás csak akkor érvényes, ha
--clreventsa beállítás meg van adva, és nem bírálja--profilefelül vagy--providersfelül. Az alábbi táblázat az elérhető eseményszinteket mutatja be.Sztring Számérték logalways0critical1error2warning3informational4verbose5--clrevents <clrevents>A CLR-futtatókörnyezet-szolgáltató kulcsszavainak listája, amelyeket jelek választanak el egymástól
+. Ez egy egyszerű leképezés, amellyel sztring aliasok használatával adhat meg esemény kulcsszavakat a hexa értékek helyett. Például ugyanazt az eseménykészletet kéri le,dotnet-trace collect-linux --providers Microsoft-Windows-DotNETRuntime:3:4mint adotnet-trace collect-linux --clrevents gc+gchandle --clreventlevel informational. Ha a CLR-futtatókörnyezet-szolgáltatóMicrosoft-Windows-DotNETRuntimeis engedélyezve--providersvan, a--profilerendszer figyelmen kívül hagyja ezt a beállítást. Az alábbi táblázat az elérhető kulcsszavak listáját mutatja:Kulcsszósztring aliasa Kulcsszó hexa értéke gc0x1gchandle0x2assemblyloader0x4loader0x8jit0x10ngen0x20startenumeration0x40endenumeration0x80security0x400appdomainresourcemanagement0x800jittracing0x1000interop0x2000contention0x4000exception0x8000threading0x10000jittedmethodiltonativemap0x20000overrideandsuppressngenevents0x40000type0x80000gcheapdump0x100000gcsampledobjectallocationhigh0x200000gcheapsurvivalandmovement0x400000managedheapcollect0x800000gcheapandtypenames0x1000000gcsampledobjectallocationlow0x2000000perftrack0x20000000stack0x40000000threadtransfer0x80000000debugger0x100000000monitoring0x200000000codesymbols0x400000000eventsource0x800000000compilation0x1000000000compilationdiagnostic0x2000000000methoddiagnostic0x4000000000typediagnostic0x8000000000jitinstrumentationdata0x10000000000profiler0x20000000000waithandle0x40000000000allocationsampling0x80000000000A CLR-szolgáltatóról részletesebben a .NET futtatókörnyezet-szolgáltató referenciadokumentációjában olvashat.
--perf-events <list-of-perf-events>A nyomkövetésbe belefoglalandó perf események vesszővel tagolt listája. A rendelkezésre álló események a tracefs alatt találhatók, amelyek általában az összes elérhető eseményhez, vagy a
/sys/kernel/tracingkategorizált események alkönyvtárán keresztül érhetőkavailable_eventsevents/el.Példa:
--perf-events syscalls:sys_enter_execve,sched:sched_switch,sched:sched_wakeup--profile <list-of-comma-separated-profile-names>A profilok a gyakori nyomkövetési forgatókönyvek szolgáltatói konfigurációinak előre definiált készletei. Egyszerre több profil is megadható, vesszővel elválasztva. A profil konfigurációjának felülbírálásával
--providerskonfigurált szolgáltatók. Hasonlóképpen, ha bármelyik profil konfigurálja a CLR futtatókörnyezet-szolgáltatót, az felülírja a megadott--clreventskonfigurációkat.Amikor
--profilea ,--providers,--clrevents, és--perf-eventsaz összes hiányzik, engedélyezi a profilokatdotnet-trace collect-linux,dotnet-commonéscpu-samplingalapértelmezés szerint.Elérhető profilok:
Profil Leírás dotnet-commonKönnyű .NET futtatókörnyezeti diagnosztikák, amelyeket úgy terveztek, hogy alacsony terhelést okoznak.
GC, AssemblyLoader, Loader, JIT, Exceptions, Threading, JittedMethodILToNativeMap és Fordítási eseményeket tartalmaz
Egyenértékű--providers "Microsoft-Windows-DotNETRuntime:0x100003801D:4".cpu-samplingKernel CPU-mintavételezés (perf-alapú), kibocsátott, mint Universal.Events/cpu, a pontos on-CPU-hozzárendelés.thread-timeA kernelszál környezeti kapcsolói a processzoron kívüli és ütemező elemzéshez kibocsátva Universal.Events/cswitch.gc-verboseNyomon követi a GC-gyűjteményeket és -mintákat az objektumfoglalásokon. gc-collectA GC-gyűjteményeket csak nagyon alacsony terhelés mellett követi nyomon. databaseRögzíti a ADO.NET és az Entity Framework adatbázis-parancsait.
Nyomkövetési gyűjtemény beállításai
-o|--output <trace-file-path>Az összegyűjtött nyomkövetési adatok kimeneti elérési útja. Ha nincs megadva, akkor alapértelmezés szerint
trace_<yyyyMMdd>_<HHmmss>.nettraceaz alapértelmezett gépszintű nyomkövetéshez és egy folyamatspecifikus nyomkövetéshez<appname>_<yyyyMMdd>_<HHmmss>.nettrace(--namevagy--process-id)--duration <time-to-run>A nyomkövetés futtatásának ideje. Használja a
dd:hh:mm:ssformátumot. Például00:00:00:055 másodpercig futtatja.
.NET-folyamat célbeállításai
A gyűjtemény alapértelmezett viselkedésének megtekintése
-n, --name <name>Annak a folyamatnak a neve, amelyből a nyomkövetést gyűjti.
-p|--process-id <PID>A nyomkövetést összegyűjtő folyamatazonosító.
Mintavételezési mód beállításai
--probe [-n|--name] [-p|--process-id] [-o|--output <stdout|output-filename>].NET-folyamatok mintavétele a collect-linux által használt EventPipe UserEvents IPC parancs támogatásához nyomkövetés nélkül. Először a támogatott folyamatokat sorolja fel az eredmények listájában. A CSV (pid,processName, supportsCollectLinux) a konzolra való nyomtatásához használja a "-o stdout" parancsot, a CSV írásához pedig a "-o output-filename" nevet. Egyetlen folyamat mintavétele -n|-name vagy -p|--process-id azonosítóval.
Mivel a mintavételi módban való futtatás
collect-linuxnem gyűjt nyomkövetést, nem igényel gyökérengedélyeket a futtatáshoz. Nem biztosítja az előfeltételek ellenőrzését, és a .NET-futtatókörnyezet (10.0.0) előzetes verzióin futó .NET-folyamatok nem támogatottak.
Feljegyzés
A nyomkövetési adatok gyűjtéséhez
dotnet-trace collect-linuxgyökérengedélyekkelCAP_PERFMON/CAP_SYS_ADMIN() kell futtatni. Ellenkező esetben az eszköz nem fogja összegyűjteni az eseményeket.
dotnet-trace konvertálás
A nyomkövetéseket nettrace alternatív formátumokká alakítja át, hogy alternatív nyomkövetési elemzési eszközökkel használható legyen.
Szinopszis
dotnet-trace convert [<input-filename>] [--format <Chromium|NetTrace|Speedscope>] [-h|--help] [-o|--output <output-filename>]
Argumentumok
<input-filename>Konvertálandó bemeneti nyomkövetési fájl. A trace.nettrace alapértelmezett értéke.
Beállítások
--format <Chromium|NetTrace|Speedscope>Beállítja a nyomkövetési fájl konvertálásának kimeneti formátumát.
-o|--output <output-filename>Kimeneti fájlnév. A program hozzáadja a célformátum bővítményét.
Feljegyzés
A fájlok nettracechromium konvertálása speedscope visszafordíthatatlan.
speedscope és chromium a fájlok nem rendelkeznek a fájlok rekonstruálásához nettrace szükséges összes információval. A convert parancs azonban megőrzi az eredeti nettrace fájlt, ezért ne törölje ezt a fájlt, ha a jövőben meg szeretné nyitni.
dotnet-trace ps
Felsorolja azokat a dotnet-folyamatokat, amelyekből a nyomkövetések gyűjthetők.
dotnet-trace A 6.0.320703-as és újabb verziókban az egyes folyamatok által elindított parancssori argumentumok is megjelennek, ha elérhetők.
Feljegyzés
A számbavételi 64 bites folyamatok teljes körű információinak lekéréséhez az eszköz 64 bites verzióját kell használnia dotnet-trace .
Szinopszis
dotnet-trace ps [-h|--help]
Példa
Tegyük fel, hogy a paranccsal dotnet run --configuration Releaseelindít egy hosszú ideig futó alkalmazást. Egy másik ablakban futtassa a dotnet-trace ps parancsot. A megjelenő kimenet a következő. Ha elérhető, a parancssori argumentumok a 6.0.320703-as és újabb verzióban dotnet-trace jelennek meg.
> dotnet-trace ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
dotnet-trace list-profiles
Az előre összeállított nyomkövetési profilokat listázza, és leírja, hogy mely szolgáltatók és szűrők találhatók az egyes profilokban.
Szinopszis
dotnet-trace list-profiles [-h|--help]
dotnet-trace jelentés
Jelentés létrehozása stdout-ba egy korábban létrehozott nyomkövetésből.
Szinopszis
dotnet-trace report [-h|--help] <tracefile> [command]
Argumentumok
<tracefile>Az elemzett nyomkövetés fájlútvonala.
Parancsok
dotnet-trace jelentés topN
Megkeresi azokat a leggyakoribb N metódusokat, amelyek a híváscsatán voltak a leghosszabb ideig.
Szinopszis
dotnet-trace report <tracefile> topN [-n|--number <n>] [--inclusive] [-v|--verbose] [-h|--help]
Beállítások
-n|--number <n>
Megadja a híváshívás legfontosabb N metódusait.
--inclusive
A felső N metódusok kimenete a befogadó idő alapján. Ha nincs megadva, alapértelmezés szerint a kizárólagos időt használja a rendszer.
-v|--verbose
Adja ki az egyes metódusok paramétereit teljes egészében. Ha nincs megadva, a paraméterek csonkulnak.
Nyomkövetés összegyűjtése dotnet-trace használatával
Nyomkövetések gyűjtése a következő használatával dotnet-trace collect:
Kérje le a .NET Core-alkalmazás folyamatazonosítóját (PID) a nyomkövetések gyűjtéséhez.
- Windows rendszeren használhatja például a Feladatkezelőt vagy a
tasklistparancsot. - Linuxon például a
psparancs. - dotnet-trace ps
- Windows rendszeren használhatja például a Feladatkezelőt vagy a
Futtassa az alábbi parancsot:
dotnet-trace collect --process-id <PID>Az előző parancs a következőhöz hasonló kimenetet hoz létre:
No profile or providers specified, defaulting to trace profiles 'dotnet-common' + 'dotnet-sampled-thread-time'. Provider Name Keywords Level Enabled By Microsoft-Windows-DotNETRuntime 0x000000100003801D Informational(4) --profile Microsoft-DotNETCore-SampleProfiler 0x0000F00000000000 Informational(4) --profile Process : <full-path-to-process-being-trace> Output File : <process>_20251007_154557.nettrace [00:00:00:02] Recording trace 178.172 (KB) Press <Enter> or <Ctrl+C> to exit... Stopping the trace. This may take several minutes depending on the application being traced. Trace completed.Állítsa le a gyűjteményt az Enter billentyű lenyomásával.
dotnet-tracebefejezi a naplózási eseményeket a.nettracefájlba.
Gyermekalkalmazás indítása és nyomkövetés gyűjtése az indításból dotnet-trace használatával
Néha hasznos lehet egy folyamat nyomának összegyűjtése az indításból. A .NET 5-ös vagy újabb verzióját futtató alkalmazások esetében ezt a dotnet-trace használatával teheti meg.
Ez parancssori argumentumokkal hello.exe indul elarg1, arg2 és nyomkövetést gyűjt a futtatókörnyezet indításakor:
dotnet-trace collect -- hello.exe arg1 arg2
Az előző parancs a következőhöz hasonló kimenetet hoz létre:
No profile or providers specified, defaulting to trace profiles 'dotnet-common' + 'dotnet-sampled-thread-time'.
Provider Name Keywords Level Enabled By
Microsoft-Windows-DotNETRuntime 0x000000100003801D Informational(4) --profile
Microsoft-DotNETCore-SampleProfiler 0x0000F00000000000 Informational(4) --profile
Process : E:\temp\gcperfsim\bin\Debug\net5.0\gcperfsim.exe
Output File : E:\temp\gcperfsim\trace.nettrace
[00:00:00:05] Recording trace 122.244 (KB)
Press <Enter> or <Ctrl+C> to exit...
A nyomkövetést leállíthatja a lenyomással vagy <Enter> a kulccsal<Ctrl + C>. Ha ezt teszi, az is kilép hello.exe.
Feljegyzés
A dotnet-trace használatával történő hello.exe indítás átirányítja a bemenetét/kimenetét, és alapértelmezés szerint nem fogja tudni használni a konzolon. Használja a kapcsolót a --show-child-io stdin/stdout használatához.
Ha a CTRL+C vagy a SIGTERM billentyűkombinációval lép ki az eszközből, az biztonságosan befejezi az eszközt és a gyermekfolyamatot is.
Ha a gyermekfolyamat az eszköz előtt kilép, az eszköz is kilép, és a nyomkövetésnek biztonságosan megtekinthetőnek kell lennie.
Nyomkövetés gyűjtése az alkalmazásindításból a diagnosztikai port használatával
A diagnosztikai port a .NET 5-ben hozzáadott futtatókörnyezeti funkció, amely lehetővé teszi a nyomkövetés indítását az alkalmazás indításakor. Ehhez dotnet-tracehasználhatja dotnet-trace collect -- <command> a fenti példákban leírt módon, vagy használhatja a --diagnostic-port lehetőséget.
Az alkalmazás gyermekfolyamatként való elindításának legegyszerűbb dotnet-trace <collect|monitor> -- <command> módja az alkalmazás indítási folyamatából való gyors nyomon követésének.
Ha azonban pontosabban szeretné szabályozni a nyomkövetés alatt álló alkalmazás élettartamát (például csak az első 10 percre figyeli az alkalmazást, és folytatja a végrehajtást), vagy ha a parancssori felület használatával kell kommunikálnia az alkalmazással, a beállítással --diagnostic-port szabályozhatja a figyelt célalkalmazást és dotnet-tracea .
Az alábbi
dotnet-traceparancs létrehoz egy elnevezettmyport.sockdiagnosztikai szoftvercsatornát, és várja meg a kapcsolatot.dotnet-trace collect --diagnostic-port myport.sockHozam:
Waiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sockEgy külön konzolon indítsa el a célalkalmazást a kimeneti értékre
DOTNET_DiagnosticPortsbeállított környezeti változóvaldotnet-trace.export DOTNET_DiagnosticPorts=/home/user/myport.sock ./my-dotnet-app arg1 arg2Ennek ezután engedélyeznie
dotnet-tracekell a nyomkövetésmy-dotnet-appindítását:Waiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=myport.sock Starting a counter session. Press Q to quit.Fontos
Az alkalmazás
dotnet runindítása problémás lehet, mert a dotnet parancssori felület számos olyan gyermekfolyamatot hozhat létre, amelyek nem az Ön alkalmazásai, és amelyekhezdotnet-traceaz alkalmazás előtt csatlakozhatnak, így az alkalmazást futásidőben fel kell függeszteni. Javasoljuk, hogy közvetlenül használja az alkalmazás önálló verzióját, vagy indítsadotnet execel az alkalmazást.
(csak Linux rendszeren) Gépszintű nyomkövetés összegyűjtése dotnet-trace használatával
Ez a példa a gép összes folyamatához rögzíti a CPU-mintákat. A .NET 10+ rendszert futtató összes folyamat tartalmaz néhány további egyszerűsített eseményt is, amelyek a GC, a JIT és a szerelvény betöltési viselkedését ismertetik.
$ sudo dotnet-trace collect-linux
==========================================================================================
The collect-linux verb is a new preview feature and relies on an updated version of the
.nettrace file format. The latest PerfView release supports these trace files but other
ways of using the trace file may not work yet. For more details, see the docs at
https://learn.microsoft.com/dotnet/core/diagnostics/dotnet-trace.
==========================================================================================
No providers, profiles, ClrEvents, or PerfEvents were specified, defaulting to trace profiles 'dotnet-common' + 'cpu-sampling'.
Provider Name Keywords Level Enabled By
Microsoft-Windows-DotNETRuntime 0x000000100003801D Informational(4) --profile
Linux Perf Events Enabled By
cpu-sampling --profile
Output File : <path-to-nettrace>trace_20251008_181939.nettrace
[00:00:00:03] Recording trace.
Press <Enter> or <Ctrl-C> to exit...
Recording stopped.
Resolving symbols.
Finished recording trace.
Trace written to <path-to-nettrace>trace_20251008_181939.nettrace
A több .NET-verzióval rendelkező környezetek esetében a collect-linux való futtatás segít megállapítani, hogy a .NET-folyamat képes-e a collect-linux használatával nyomon követni.
$ dotnet-trace collect-linux --probe
==========================================================================================
The collect-linux verb is a new preview feature and relies on an updated version of the
.nettrace file format. The latest PerfView release supports these trace files but other
ways of using the trace file may not work yet. For more details, see the docs at
https://learn.microsoft.com/dotnet/core/diagnostics/dotnet-trace.
==========================================================================================
Probing .NET processes for support of the EventPipe UserEvents IPC command used by collect-linux. Requires runtime '10.0.0' or later.
.NET processes that support the command:
3802935 MyApp
.NET processes that do NOT support the command:
3809123 dotnet - Detected runtime: '10.0.0-rc.1.25451.107'
A dotnet-trace-ből rögzített nyomkövetés megtekintése
Windows rendszeren a .nettrace-fájlokat a Visual Studióban vagy a PerfView-ban tekintheti meg elemzés céljából.
Linuxon a nyomkövetést úgy tekintheti meg, hogy a kimeneti formátumot a következőre dotnet-tracemódosítjaspeedscope. Módosítsa a kimeneti fájlformátumot a -f|--format beállítással. Választhat ( nettrace az alapértelmezett beállítás) és a speedscope. Ez a -f speedscope beállítás dotnet-trace létrehoz egy speedscope fájlt.
Speedscope fájlokat a következő helyen nyithatja meg: https://www.speedscope.app.
A nem Windows-platformokon gyűjtött nyomkövetések esetében a nyomkövetési fájlt áthelyezheti egy Windows-gépre, és megtekintheti a Visual Studióban vagy a PerfView-ban.
Feljegyzés
A .NET Core-futtatókörnyezet nyomkövetéseket hoz létre a nettrace formátumban. A nyomkövetéseket a rendszer a nyomkövetés befejezése után sebességmérővé alakítja (ha meg van adva). Mivel egyes átalakítások adatvesztést okozhatnak, az eredeti nettrace fájl megmarad a konvertált fájl mellett.
Az .rsp fájl használata a hosszú parancsok beírásának elkerülése érdekében
Elindíthat dotnet-trace egy .rsp fájlt, amely tartalmazza az átadandó argumentumokat. Ez akkor lehet hasznos, ha olyan szolgáltatókat engedélyez, amelyek hosszadalmas argumentumokat várnak, vagy ha karaktereket csíkozó rendszerhéj-környezetet használnak.
A következő szolgáltató például nehézkes lehet, ha minden nyomkövetési alkalommal beír:
dotnet-trace collect --providers Microsoft-Diagnostics-DiagnosticSource:0x3:5:FilterAndPayloadSpecs="SqlClientDiagnosticListener/System.Data.SqlClient.WriteCommandBefore@Activity1Start:-Command;Command.CommandText;ConnectionId;Operation;Command.Connection.ServerVersion;Command.CommandTimeout;Command.CommandType;Command.Connection.ConnectionString;Command.Connection.Database;Command.Connection.DataSource;Command.Connection.PacketSize\r\nSqlClientDiagnosticListener/System.Data.SqlClient.WriteCommandAfter@Activity1Stop:\r\nMicrosoft.EntityFrameworkCore/Microsoft.EntityFrameworkCore.Database.Command.CommandExecuting@Activity2Start:-Command;Command.CommandText;ConnectionId;IsAsync;Command.Connection.ClientConnectionId;Command.Connection.ServerVersion;Command.CommandTimeout;Command.CommandType;Command.Connection.ConnectionString;Command.Connection.Database;Command.Connection.DataSource;Command.Connection.PacketSize\r\nMicrosoft.EntityFrameworkCore/Microsoft.EntityFrameworkCore.Database.Command.CommandExecuted@Activity2Stop:",OtherProvider,AnotherProvider
Az előző példa emellett az argumentum részeként is szerepel " . Mivel az idézőjeleket nem minden rendszerhéj egyformán kezeli, különböző problémák léphetnek fel a különböző rendszerhéjak használatakor. A beírandó zsh parancs például eltér a következő parancstól cmd: .
Ahelyett, hogy minden alkalommal beírja ezt a szöveget, mentheti a következő szöveget egy úgynevezett myprofile.rspfájlba.
--providers
Microsoft-Diagnostics-DiagnosticSource:0x3:5:FilterAndPayloadSpecs="SqlClientDiagnosticListener/System.Data.SqlClient.WriteCommandBefore@Activity1Start:-Command;Command.CommandText;ConnectionId;Operation;Command.Connection.ServerVersion;Command.CommandTimeout;Command.CommandType;Command.Connection.ConnectionString;Command.Connection.Database;Command.Connection.DataSource;Command.Connection.PacketSize\r\nSqlClientDiagnosticListener/System.Data.SqlClient.WriteCommandAfter@Activity1Stop:\r\nMicrosoft.EntityFrameworkCore/Microsoft.EntityFrameworkCore.Database.Command.CommandExecuting@Activity2Start:-Command;Command.CommandText;ConnectionId;IsAsync;Command.Connection.ClientConnectionId;Command.Connection.ServerVersion;Command.CommandTimeout;Command.CommandType;Command.Connection.ConnectionString;Command.Connection.Database;Command.Connection.DataSource;Command.Connection.PacketSize\r\nMicrosoft.EntityFrameworkCore/Microsoft.EntityFrameworkCore.Database.Command.CommandExecuted@Activity2Stop:",OtherProvider,AnotherProvider
A mentést myprofile.rspkövetően a következő paranccsal indíthatja el dotnet-trace ezt a konfigurációt:
dotnet-trace @myprofile.rsp