Canlı işlem hata ayıklama ve döküm analizi yardımcı programı (dotnet-debug)

Bu makale şunlar için geçerlidir: ✔️ dotnet-debug sürüm 0.0.710501 ve sonraki sürümler

Uyarı

dotnet-debug şu anda yalnızca CoreCLR tabanlı uygulamaları destekler ve şu anda macOS'ta desteklenmez.

Install

NuGet paketinin en son sürüm sürümünü dotnet-debugyüklemek için dotnet tool install komutunu kullanın:

dotnet tool install --global dotnet-debug

Özet

dotnet-debug [-h|--help] [--version] <command>

Description

Genel dotnet-debug araç, canlı .NET işlemlerine eklemenizi ve döküm dosyalarını etkileşimli olarak analiz etmenizi sağlar. Döküm toplama ve çevrimdışı analize odaklanan 'nin aksine dotnet-dump, dotnet-debug canlı işlem incelemesi için tasarlanmıştır. ile aynı SOS hata ayıklama komutlarınıdotnet-dumpdestekler.

Bu araç, tam olarak çalışan lldb bir sürümün kullanılamadığı Alpine Linux gibi platformlarda kullanışlıdır. Araç, dotnet-debug yönetilen durumu ve yığın tanılamalarını analiz etmek için SOS komutlarını çalıştırır, ancak yerel bir hata ayıklayıcı olmadığından yerel yığın çerçevelerinin görüntülenmesi desteklenmez.

Options

  • --version

    dotnet-debug yardımcı programının sürümünü görüntüler.

  • -h|--help

    Komut satırı yardımlarını gösterir.

Commands

Command
dotnet-debug ekleme
dotnet-debug open-dump

dotnet-debug ekleme

Canlı işleme ekler ve keşfetmek için hata ayıklama komutlarını içeren etkileşimli bir kabuk başlatır.

Özet

dotnet-debug attach <process-id> [-c|--commands <debug_command>] [--accept-license-agreement]

Arguments

  • <process-id>

    Eklenecek ve çözümlenen işlem kimliği.

Options

  • -c|--commands <debug_command>

    Komutları 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ışır. Komutlar sonrasında çıkmak istiyorsanız dotnet-debug , son komutunuz olmalıdır exit.

  • --accept-license-agreement

    İstenmeden lisans sözleşmesini kabul eder.

Example

1234 kimliğine sahip çalışan bir işleme ekleme:

$ dotnet-debug attach 1234
Attaching to process: 1234 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>

Eklemede bir komut çalıştırın ve sonra çıkın:

dotnet-debug attach 1234 -c clrstack -c exit

dotnet-debug open-dump

Döküm dosyasını keşfetmek için hata ayıklama komutlarıyla etkileşimli bir kabuk başlatır.

Özet

dotnet-debug open-dump <dump_path> [-c|--commands] [--accept-license-agreement]

Arguments

  • <dump_path>

    Analiz etmek için döküm dosyasının yolu.

Options

  • -c|--commands <debug_command>

    Komutları 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ışır. Komutlar sonrasında çıkmak istiyorsanız dotnet-debug , son komutunuz olmalıdır exit.

  • --accept-license-agreement

    İstenmeden lisans sözleşmesini kabul eder.

Example

Döküm dosyasını açın ve analiz edin:

$ dotnet-debug open-dump ./core_20260209_135837
Loading dump: ./core_20260209_135837 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>

SOS komutlarında hata ayıklama

attach Hem ve open-dump komutları hem de aşağıdaki SOS komutlarını kabul eden etkileşimli bir oturum açar.

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şvuruda bulundukları tür adını ve MethodTable'ı 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 stres günlüğü yeniden konumlandırma kayıtlarını inceler ve bağımsız değişken olarak geçirilen adrese yol açmış olabilecek çöp toplama yeniden konumlandırma 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 kullanın 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.

Uyarı

Diğer ayrıntılar için bkz. .NET için SOS Hata Ayıklama Uzantısı.

Canlı işleme eklemek için kullanma dotnet-debug

Aşağıdaki örnekte, çalışan bir .NET işlemine nasıl eklendiği ve iş parçacığı havuzu sorununun nasıl araştırılması gösterilmektedir:

$ dotnet-debug attach 1902
Attaching to process: 1902 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>

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)
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.Program.Foo4(System.String)
00007FFD28B42ED0 00007FB1B18D2FC4 SymbolTestApp.Program.Foo2(Int32, System.String)
00007FFD28B42F00 00007FB1B18D2F5A SymbolTestApp.Program.Foo1(Int32, System.String)
00007FFD28B42F30 00007FB1B18D168E SymbolTestApp.Program.Main(System.String[])

İş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
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.dll!SymbolTestApp.Program.Foo4(System.String)+0x15d

StackTraceString: <none>
HResult: 80131604

dotnet-debug ve dotnet-dump

dotnet-debug ve dotnet-dump aynı SOS hata ayıklama komutlarını paylaşın, ancak farklı birincil amaçlara hizmet edin:

Özellik dotnet-debug dotnet-dump
Canlı işleme ekleme ✔️
Dökümleri toplama ✔️
Döküm dosyalarını analiz etme ✔️ ✔️
.NET işlemlerini listeleme (ps) ✔️

Canlı bir işlemde etkileşimli olarak hata ayıklamanız gerektiğinde kullanın dotnet-debug . Dökümleri toplamanız veya çevrimdışı analiz etmeniz gerektiğinde kullanın dotnet-dump .

Ayrıca bakınız