Döküm toplama ve analiz yardımcı programı (dotnet-dump)
Bu makale şunlar için geçerlidir: ✔️ dotnet-dump
sürüm 3.0.47001 ve sonraki sürümler
Not
dotnet-dump
macOS için yalnızca .NET 5 ve sonraki sürümlerde desteklenir.
Yükleme
İndirmenin ve yüklemenin dotnet-dump
iki yolu vardır:
dotnet genel aracı:
NuGet paketinin en son sürüm sürümünü
dotnet-dump
yüklemek için dotnet tool install komutunu kullanın:dotnet tool install --global dotnet-dump
Doğrudan indirme:
Platformunuzla eşleşen araç yürütülebilir dosyasını indirin:
OS Platform Windows x86 | x64 | Arm | Arm-x64 Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
Not
Bir x86 uygulamasında kullanmak dotnet-dump
için aracın ilgili x86 sürümünü kullanmanız gerekir.
Özet
dotnet-dump [-h|--help] [--version] <command>
Açıklama
Genel dotnet-dump
araç, yerel hata ayıklayıcı içermeden Windows, Linux ve macOS'ta dökümleri toplamanın ve analiz etmenin bir yoludur. Bu araç, tam olarak çalışan lldb
bir sürümün kullanılamadığı Alpine Linux gibi platformlarda önemlidir. Araç, dotnet-dump
kilitlenmeleri ve çöp toplayıcıyı (GC) analiz etmek için SOS komutlarını çalıştırmanıza olanak tanır, ancak yerel bir hata ayıklayıcı olmadığından yerel yığın çerçevelerini görüntüleme gibi işlemler desteklenmez.
Seçenekler
--version
dotnet-dump yardımcı programının sürümünü görüntüler.
-h|--help
Komut satırı yardımlarını gösterir.
Komutlar
Command |
---|
dotnet-dump collect |
dotnet-dump çözümle |
dotnet-dump ps |
dotnet-dump collect
Bir işlemden dökümü yakalar.
Özet
dotnet-dump collect [-h|--help] [-p|--process-id] [-n|--name] [--type] [-o|--output] [--diag] [--crashreport]
Seçenekler
-h|--help
Komut satırı yardımlarını gösterir.
-p|--process-id <PID>
Dökümü toplayacak işlem kimliği numarasını belirtir.
-n|--name <name>
Dökümü toplayacak işlemin adını belirtir.
--type <Full|Heap|Mini>
İşlemden toplanan bilgi türlerini belirleyen döküm türünü belirtir. Üç tür kur vardır:
Full
- Modül görüntüleri dahil olmak üzere tüm belleği içeren en büyük döküm.Heap
- Modül listelerini, iş parçacığı listelerini, tüm yığınları, özel durum bilgilerini, işleme bilgilerini ve eşlenen görüntüler dışındaki tüm belleği içeren büyük ve nispeten kapsamlı bir döküm.Mini
- Modül listelerini, iş parçacığı listelerini, özel durum bilgilerini ve tüm yığınları içeren küçük bir döküm.
Belirtilmezse,
Full
varsayılan değerdir.-o|--output <output_dump_path>
Toplanan dökümü yazılması gereken tam yol ve dosya adı. dotnet işleminin çalıştığı kullanıcının belirtilen dizine yazma izinlerine sahip olduğundan emin olun.
Belirtilmezse:
- Windows'ta varsayılan olarak .\dump_YYYYMMDD_HHMMSS.dmp .
- Linux ve macOS'ta varsayılan olarak ./core_YYYYMMDD_HHMMSS değeridir.
YYYYMMDD Yıl/Ay/Gün, HHMMSS ise Saat/Dakika/Saniyedir.
--diag
Döküm toplama tanılama günlüğünü etkinleştirir.
--crashreport
Kilitlenme raporu oluşturmayı etkinleştirir.
Not
Linux ve macOS'ta bu komut hedef uygulamanın ve dotnet-dump
aynı TMPDIR
ortam değişkenini paylaşmasını bekler. Aksi takdirde, komut zaman aşımına uğradı.
Not
kullanarak dotnet-dump
döküm toplamak için, hedef işlemi çalıştıran kullanıcıyla aynı kullanıcı olarak veya kök olarak çalıştırılması gerekir. Aksi takdirde araç hedef işlemle bağlantı kuramaz.
dotnet-dump çözümle
Dökümü keşfetmek için etkileşimli bir kabuk başlatır. Kabuk çeşitli SOS komutlarını kabul eder.
Özet
dotnet-dump analyze <dump_path> [-h|--help] [-c|--command]
Bağımsız değişkenler
<dump_path>
Analiz etmek için döküm dosyasının yolunu belirtir.
Seçenekler
-c|--command <debug_command>
Komutu başlangıçta çalıştırır. Komutları zincirleme çağrısında bu parametrenin birden çok örneği kullanılabilir. Komutlar, komut satırında sağlandığı sırayla çalıştırılır. Komutlar sonrasında dotnet dökümü çıkılmasını istiyorsanız, son komutunuz 'exit' olmalıdır.
SOS komutlarını analiz etme
Command | İşlev |
---|---|
analyzeoom |
GC yığınına bir ayırma isteğinde gerçekleşen son OOM'un bilgilerini görüntüler. |
clrmodules |
İşlemdeki yönetilen modülleri listeler. |
clrstack |
Yalnızca bir yönetilen kodların bir yığın izlemesini sağlar. |
clrthreads |
Çalışan yönetilen iş parçacıklarını listeler. |
clru |
Yönetilen yöntemin açıklamalı bir ayrıştırma durumunu görüntüler. |
d veya readmemory |
Bellek içeriğinin dökümünü alır. |
dbgout |
İç SOS günlüğünü etkinleştirir/devre dışı bırakır-off . |
dso |
Geçerli yığının sınırları içinde bulunan tüm yönetilen nesneleri görüntüler. |
dumpalc |
Belirtilen nesnenin yüklendiği collectible AssemblyLoadContext hakkındaki ayrıntıları görüntüler. |
dumparray |
Yönetilen dizi hakkındaki ayrıntıları görüntüler. |
dumpasync |
Atık olarak toplanan yığındaki zaman uyumsuz durum makineleri hakkındaki bilgileri görüntüler. |
dumpassembly |
Derlemeyle ilgili ayrıntıları görüntüler. |
dumpclass |
Belirtilen adreste EEClass yapı hakkındaki bilgileri görüntüler. |
dumpconcurrentdictionary |
Eşzamanlı sözlük içeriğini görüntüler. |
dumpconcurrentqueue |
Eşzamanlı kuyruk içeriğini görüntüler. |
dumpdelegate |
Temsilci hakkındaki bilgileri görüntüler. |
dumpdomain |
Tüm AppDomains veya belirtilen içindeki tüm derlemeler hakkındaki bilgileri görüntüler. |
dumpgcdata |
GC verileri hakkındaki bilgileri görüntüler. |
dumpgen |
Belirtilen nesil için yığın içeriğini görüntüler. |
dumpheap |
Atık olarak toplanan yığın hakkındaki bilgileri ve nesnelerle ilgili toplama istatistiklerini görüntüler. |
dumpil |
Yönetilen bir yöntemle ilişkili ortak ara dili (CIL) görüntüler. |
dumplog |
Bir bellek içi yük günlüğünün içeriğini belirtilen dosyaya yazar. |
dumpmd |
Belirtilen adreste MethodDesc yapı hakkındaki bilgileri görüntüler. |
dumpmodule |
Belirtilen adreste modül hakkındaki bilgileri görüntüler. |
dumpmt |
Belirtilen adreste yöntem tablosu hakkındaki bilgileri görüntüler. |
dumpobj |
Belirtilen adreste nesnenin bilgilerini görüntüler. |
dumpruntimetypes |
GC yığınındaki tüm System.RuntimeType nesnelerini bulur ve başvurdıkları tür adını ve MethodTable'ı da yazdırır. |
dumpsig |
tarafından <sigaddr> <moduleaddr> belirtilen bir yöntemin veya alanın imzasını dökümünü alır. |
dumpsigelem |
İmza nesnesinin tek bir öğesinin dökümünü alır. |
dumpstackobjects |
Geçerli yığının sınırları içinde bulunan tüm yönetilen nesneleri görüntüler. |
dumpvc |
Değer sınıfının alanları hakkındaki bilgileri görüntüler. |
eeheap |
İç çalışma zamanı veri yapıları tarafından kullanılan işlem belleği hakkındaki bilgileri görüntüler. |
eestack |
İşlemdeki tüm iş parçacıklarında çalışır dumpstack . |
eeversion |
Çalışma zamanı ve SOS sürümleri hakkındaki bilgileri görüntüler. |
ehinfo |
JIT-ed yönteminde özel durum işleme bloklarını görüntüler. |
exit veya quit |
Etkileşimli moddan çıkar. |
finalizequeue |
Sonlandırma için kaydolan tüm nesneleri görüntüler. |
findappdomain |
Bir GC nesnesinin AppDomain'ini çözümlemeye çalışır. |
gchandles |
İşlemdeki çöp toplayıcı tanıtıcılarıyla ilgili istatistikleri görüntüler. |
gcheapstat |
Çöp toplayıcı hakkındaki istatistikleri görüntüler. |
gcinfo |
Bir yöntem için JIT GC kodlamasını görüntüler. |
gcroot |
Belirtilen adreste nesneye yapılan başvurular (veya kökler) hakkındaki bilgileri görüntüler. |
gcwhere |
Belirtilen adresin GC yığınındaki konumu görüntüler. |
histclear |
Hist komutları ailesi tarafından kullanılan tüm kaynakları serbest bırakır. |
histinit |
Hatası ayıklanana kaydedilen yük günlüğünden SOS yapılarını başlatır. |
histobj |
Tüm yük günlüğü yeniden yerleştirme kayıtlarını inceler ve bir bağımsız değişken olarak geçirilen adrese yönlendirebilecek çöp toplama yeniden konumlandırmaları zincirini görüntüler. |
histobjfind |
Belirtilen adreste nesneye başvuran tüm günlük girdilerini görüntüler. |
histroot |
Belirtilen kökün tanıtımlarıyla ve yeniden konumlandırılmalarıyla ilişkili bilgileri görüntüler. |
histstats |
Stres günlüğü istatistiklerini görüntüler. |
ip2md |
MethodDesc JIT ile derlenmiş kodda belirtilen adresteki yapıyı görüntüler. |
listnearobj |
Belirtilen adresin önündeki ve sonrasındaki nesneyi görüntüler. |
logopen |
Konsol dosyası günlüğünü etkinleştirir. |
logclose |
Konsol dosyası günlüğünü devre dışı bırakır. |
logging |
İç SOS günlüğünü etkinleştirir/devre dışı bırakır. |
lm veya modules |
İşlemdeki yerel modülleri görüntüler. |
name2ee |
Belirtilen modülde MethodTable belirtilen tür veya yöntem için ve EEClass yapılarını görüntüler. |
objsize |
Belirtilen nesnenin boyutunu görüntüler. |
parallelstacks |
Birleştirilmiş iş parçacıkları yığınını Visual Studio 'Paralel Yığınlar' paneline benzer şekilde görüntüler. |
pathto |
gc yolunu ile <root> <target> görüntüler. |
pe veya printexception |
Belirtilen adreste sınıfından türetilen herhangi bir nesnenin Exception alanlarını görüntüler ve biçimlendirebilir. |
r veya registers |
İş parçacığının kayıtlarını görüntüler. |
runtimes |
Hedefteki çalışma zamanlarını listeler veya varsayılan çalışma zamanını değiştirir. |
setclrpath |
kullanarak setclrpath <path> coreclr dac/dbi dosyalarını yüklemek için yolu ayarlar. |
setsymbolserver |
Sembol sunucusu desteğini etkinleştirir. |
sos |
Çeşitli coreclr hata ayıklama komutlarını yürütür. söz dizimini sos <command-name> <args> kullanın. Daha fazla bilgi için bkz. 'soshelp'. |
soshelp veya help |
Kullanılabilir tüm komutları görüntüler. |
soshelp <command> veya help <command> |
Belirtilen komutu görüntüler. |
syncblk |
SyncBlock tutucu bilgilerini görüntüler. |
taskstate |
Görev durumunu okunabilir bir biçimde görüntüler. |
threadpool |
Çalışma zamanı iş parçacığı havuzu hakkındaki bilgileri görüntüler. |
threadpoolqueue |
Kuyruğa alınmış iş parçacığı havuzu iş öğelerini görüntüler. |
threadstate |
Bir iş parçacığı durumunun anlamını oldukça yazdırır. |
threads <threadid> veya setthread <threadid> |
SOS komutları için geçerli iş parçacığı kimliğini ayarlar veya görüntüler. |
timerinfo |
Zamanlayıcıları çalıştırma hakkındaki bilgileri görüntüler. |
token2ee |
Belirtilen belirteç ve modül için MethodTable yapısını ve MethodDesc yapısını görüntüler. |
traverseheap |
Yığın bilgilerini CLR Profiler tarafından anlaşılan bir biçimde bir dosyaya yazar. |
verifyheap |
GC yığınında bozulma belirtileri olup olmadığını denetler. |
verifyobj |
Bir bağımsız değişken olarak geçirilen nesnede bozulma işaretleri olup olmadığını kontrol eder. |
Not
Ek ayrıntılar .NET için SOS Hata Ayıklama Uzantısı'nda bulunabilir.
dotnet-dump ps
Dökümlerin toplanabileceği dotnet işlemlerini listeler.
dotnet-dump
sürüm 6.0.320703 ve sonraki sürümler, varsa her işlemin başlatıldığı komut satırı bağımsız değişkenlerini de görüntüler.
Özet
dotnet-dump ps [-h|--help]
Örnek
komutunu dotnet run --configuration Release
kullanarak uzun süre çalışan bir uygulama başlattığınızı varsayalım. Başka bir pencerede komutunu çalıştırırsınız dotnet-dump ps
. Göreceğiniz çıkış aşağıdaki gibidir. Varsa, komut satırı bağımsız değişkenleri 6.0.320703 ve sonraki sürümlerde dotnet-dump
gösterilir.
> dotnet-dump ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
dotnet-dump
kullanma
İlk adım bir döküm toplamaktır. Çekirdek dökümü zaten oluşturulduysa bu adım atlanabilir. İşletim sistemi veya .NET Core çalışma zamanının yerleşik döküm oluşturma özelliği her çekirdek dökümü oluşturabilir.
$ dotnet-dump collect --process-id 1902
Writing minidump to file ./core_20190226_135837
Written 98983936 bytes (24166 pages) to core file
Complete
Şimdi şu komutla çekirdek dökümünü analiz edin analyze
:
$ dotnet-dump analyze ./core_20190226_135850
Loading core dump: ./core_20190226_135850
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.
>
Bu eylem aşağıdaki gibi komutları kabul eden etkileşimli bir oturum açar:
> 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) [/root/coreclr/src/mscorlib/src/System/Reflection/RuntimeMethodInfo.cs @ 472]
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.Program.Foo4(System.String) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 54]
00007FFD28B42ED0 00007FB1B18D2FC4 SymbolTestApp.Program.Foo2(Int32, System.String) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 29]
00007FFD28B42F00 00007FB1B18D2F5A SymbolTestApp.Program.Foo1(Int32, System.String) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 24]
00007FFD28B42F30 00007FB1B18D168E SymbolTestApp.Program.Main(System.String[]) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 19]
00007FFD28B43210 00007fb22aa9cedf [GCFrame: 00007ffd28b43210]
00007FFD28B43610 00007fb22aa9cedf [GCFrame: 00007ffd28b43610]
Uygulamanızı öldüren işlenmeyen bir özel durumu görmek için:
> 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 [/root/coreclr/src/mscorlib/src/System/Reflection/RuntimeMethodInfo.cs @ 472]
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.dll!SymbolTestApp.Program.Foo4(System.String)+0x15d [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 54]
00007FFD28B42ED0 00007FB1B18D2FC4 SymbolTestApp.dll!SymbolTestApp.Program.Foo2(Int32, System.String)+0x34 [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 29]
00007FFD28B42F00 00007FB1B18D2F5A SymbolTestApp.dll!SymbolTestApp.Program.Foo1(Int32, System.String)+0x3a [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 24]
00007FFD28B42F30 00007FB1B18D168E SymbolTestApp.dll!SymbolTestApp.Program.Main(System.String[])+0x6e [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 19]
StackTraceString: <none>
HResult: 80131604
Döküm toplama sorunlarını giderme
Döküm toplama işleminin çağırabilmesini ptrace
gerektirir. Dökümleri toplamayla ilgili sorunlarla karşılaşıyorsanız, üzerinde çalıştığınız ortam bu tür çağrıları kısıtlayacak şekilde yapılandırılabilir. Sorun giderme ipuçları ve yaygın sorunların olası çözümleri için Bkz. Dökümler: SSS.