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-dumpiki yolu vardır:

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-dumpdö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 Releasekullanarak 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 ptracegerektirir. 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.

Ayrıca bkz.