Bagikan melalui


Utilitas pengumpulan dan analisis crash dump (dotnet-dump)

Artikel ini berlaku untuk: ✔️ dotnet-dump versi 3.0.47001 dan versi yang lebih baru

Catatan

dotnet-dump untuk macOS hanya didukung dengan .NET 5 dan versi yang lebih baru.

Instal

Ada dua cara untuk mengunduh dan menginstal dotnet-dump:

Catatan

Untuk menggunakan dotnet-dump pada aplikasi x86, Anda memerlukan alat versi x86 yang sesuai.

Sinopsis

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

Deskripsi

Alat global dotnet-dump adalah cara untuk mengumpulkan dan menganalisis cadangan di Windows, Linux, dan macOS tanpa debugger asli yang terlibat. Alat ini penting pada platform seperti Alpine Linux di mana lldb yang bekerja secara penuh tidak tersedia. Alat dotnet-dump ini memungkinkan Anda menjalankan perintah SOS untuk menganalisis crash dan pengumpul sampah (GC), tetapi ini bukan debugger asli sehingga hal-hal seperti menampilkan bingkai tumpukan asli tidak didukung.

Opsi

  • --version

    Menampilkan versi utilitas dotnet-dump.

  • -h|--help

    Tampilkan bantuan baris perintah.

Perintah

Perintah
dotnet-dump kumpulkan
Analisis dotnet-dump
dotnet-dump ps

dotnet-dump kumpulkan

Mengambil cadangan dari proses.

Sinopsis

dotnet-dump collect [-h|--help] [-p|--process-id] [-n|--name] [--type] [-o|--output] [--diag] [--crashreport]

Opsi

  • -h|--help

    Tampilkan bantuan baris perintah.

  • -p|--process-id <PID>

    Menentukan nomor ID proses untuk mengumpulkan crash dump.

  • -n|--name <name>

    Menentukan nomor ID proses untuk mengumpulkan crash dump.

  • --type <Full|Heap|Mini>

    Menentukan jenis crash dump, yang menentukan jenis informasi yang dikumpulkan dari proses. Terdapat tiga jenis:

    • Full - Crash dump terbesar yang berisi semua memori termasuk gambar modul.
    • Heap - Crash dump besar dan relatif komprehensif yang berisi daftar modul, daftar utas, semua tumpukan, informasi pengecualian, menangani informasi, dan semua memori kecuali untuk gambar yang dipetakan.
    • Mini - Crash dump kecil yang berisi daftar modul, daftar utas, informasi pengecualian, dan semua tumpukan.
    • Triage - Cadangan kecil yang berisi daftar modul, daftar utas, informasi pengecualian, semua tumpukan, dan PII dihapus.

    Jika tidak ditentukan, Full adalah default.

  • -o|--output <output_dump_path>

    Jalur lengkap dan nama file tempat crash dump yang dikumpulkan harus ditulis. Pastikan bahwa pengguna tempat proses dotnet berjalan memiliki izin tulis ke direktori yang ditentukan.

    Jika tidak ditentukan:

    • Default ke .\dump_YYYYMMDD_HHMMSS.dmp pada Windows.
    • Default ke ./core_YYYYMMDD_HHMMSS di Linux dan macOS.

    YYYYMMDD adalah Tahun/Bulan/Hari dan HHMMSS adalah Jam/Menit/Detik.

  • --diag

    Mengaktifkan pembuatan log diagnostik pengumpulan crash dump.

  • --crashreport

    Mengaktifkan pembuatan laporan crash.

Catatan

Di Linux dan macOS, perintah ini mengharapkan aplikasi target dan dotnet-dump untuk membagikan variabel lingkungan TMPDIR yang sama. Jika tidak, perintah akan kehabisan waktu.

Catatan

Untuk mengumpulkan crash dump menggunakan dotnet-dump, metrik perlu dijalankan sebagai pengguna yang sama dengan pengguna yang menjalankan proses target atau sebagai akar. Jika tidak, alat akan gagal membuat koneksi dengan proses target.

Catatan

Mengumpulkan cadangan penuh atau timbunan dapat menyebabkan OS ke halaman dalam memori virtual yang substansial untuk proses target. Jika proses target berjalan dalam kontainer dengan batas memori yang diberlakukan, peningkatan penggunaan memori dapat menyebabkan OS mengakhiri kontainer jika batas terlampaui. Sebaiknya uji untuk memastikan batas memori diatur cukup tinggi. Opsi lain adalah mengubah atau menghapus batas sementara sebelum pengumpulan cadangan jika lingkungan Anda mendukungnya.

Analisis dotnet-dump

Memulai shell interaktif untuk menjelajahi cadangan. Shell menerima berbagai perintah SOS.

Sinopsis

dotnet-dump analyze <dump_path> [-h|--help] [-c|--command]

Argumen

  • <dump_path>

    Menentukan jalur ke file crash dump untuk dianalisis.

Opsi

  • -c|--command <debug_command>

    Menjalankan perintah saat mulai. Beberapa instans parameter ini dapat digunakan dalam pemanggilan untuk menautkan perintah. Perintah akan dijalankan dalam urutan yang disediakan pada baris perintah. Jika Anda ingin dotnet dump keluar setelah perintah, perintah terakhir Anda harus 'exit'.

Menganalisis perintah SOS

Perintah Fungsi
analyzeoom Menampilkan info OOM terakhir yang terjadi pada permintaan alokasi ke tumpukan GC.
clrmodules Mencantumkan modul terkelola dalam proses.
clrstack Menyediakan jejak tumpukan kode terkelola saja.
clrthreads Mencantumkan utas terkelola yang sedang berjalan.
clru Menampilkan pembongkaran yang dianotasi dari metode terkelola.
d atau readmemory Mencadangkan isi memori.
dbgout Mengaktifkan/menonaktifkan (-off) pengelogan SOS internal.
dso Menampilkan semua objek terkelola yang ditemukan di dalam batas tumpukan saat ini.
dumpalc Menampilkan detail tentang AssemblyLoadContext yang dikumpulkan tempat objek yang ditentukan dimuat.
dumparray Menampilkan detail tentang array terkelola.
dumpasync Menampilkan info tentang mesin status asinkron pada tumpukan yang dikumpulkan sampah.
dumpassembly Menampilkan detail tentang rakitan.
dumpclass Menampilkan informasi tentang struktur EEClass pada alamat yang ditentukan.
dumpconcurrentdictionary Menampilkan isi kamus bersamaan.
dumpconcurrentqueue Menampilkan isi antrean bersamaan.
dumpdelegate Menampilkan informasi tentang delegasi.
dumpdomain Menampilkan informasi tentang semua rakitan dalam semua AppDomains atau yang ditentukan.
dumpgcdata Menampilkan informasi tentang data GC.
dumpgen Menampilkan isi timbunan untuk pembuatan yang ditentukan.
dumpheap Menampilkan informasi tentang tumpukan sampah dan statistik pengumpulan tentang objek.
dumpil Menampilkan bahasa perantara umum (CIL) yang terkait dengan metode terkelola.
dumplog Menulis konten log tekanan dalam memori ke file yang ditentukan.
dumpmd Menampilkan informasi tentang struktur MethodDesc pada alamat yang ditentukan.
dumpmodule Menampilkan informasi tentang modul pada alamat yang ditentukan.
dumpmt Menampilkan informasi tentang tabel metode pada alamat yang ditentukan.
dumpobj Menampilkan info objek pada alamat yang ditentukan.
dumpruntimetypes Menemukan semua objek System.RuntimeType di tumpukan GC dan mencetak nama jenis dan MethodTable yang mereka rujuk juga.
dumpsig Mencadangkan tanda tangan metode atau bidang yang ditentukan oleh <sigaddr> <moduleaddr>.
dumpsigelem Mencadangkan satu elemen objek tanda tangan.
dumpstackobjects Menampilkan semua objek terkelola yang ditemukan di dalam batas tumpukan saat ini.
dumpvc Menampilkan info tentang bidang kelas nilai.
eeheap Menampilkan informasi tentang memori proses yang digunakan oleh struktur data runtime bahasa umum internal.
eestack Menjalankan dumpstack pada semua utas dalam proses.
eeversion Menampilkan informasi tentang versi runtime dan SOS.
ehinfo Menampilkan blok penanganan pengecualian dalam metode JIT-ed.
exit atau quit Keluar dari mode interaktif.
finalizequeue Menampilkan semua objek yang terdaftar untuk finalisasi.
findappdomain Mencoba mengatasi AppDomain objek GC.
gchandles Menampilkan statistik tentang handel pengumpul sampah dalam prosesnya.
gcheapstat Menampilkan statistik tentang pengumpul sampah.
gcinfo Menampilkan pengodean JIT GC untuk metode .
gcroot Menampilkan info tentang referensi (atau akar) ke objek pada alamat yang ditentukan.
gcwhere Menampilkan lokasi dalam tumpukan GC dari alamat yang ditentukan.
histclear Merilis sumber daya apa pun yang digunakan oleh keluarga perintah Hist.
histinit Menginisialisasi struktur SOS dari log tekanan yang disimpan dalam debuggee.
histobj Memeriksa semua catatan relokasi log tekanan dan menampilkan rantai relokasi pengumpulan sampah yang mungkin menyebabkan alamat yang diteruskan sebagai argumen.
histobjfind Menampilkan semua entri log yang mereferensikan objek pada alamat yang ditentukan.
histroot Menampilkan informasi yang terkait dengan promosi dan relokasi akar yang ditentukan.
histstats Menampilkan statistik log stres.
ip2md Menampilkan MethodDesc struktur pada alamat yang ditentukan dalam kode yang telah dikompilasi JIT.
listnearobj Menampilkan objek sebelumnya dan menggantikan alamat yang ditentukan.
logopen Mengaktifkan pengelogan file konsol.
logclose Menonaktifkan pengelogan file konsol.
logging Mengaktifkan/menonaktifkan pengelogan SOS internal.
lm atau modules Menampilkan modul asli dalam proses.
name2ee Menampilkan struktur MethodTable dan EEClass untuk jenis atau metode yang ditentukan dalam modul yang ditentukan.
objsize Menampilkan ukuran objek yang ditentukan.
parallelstacks Menampilkan tumpukan utas gabungan yang mirip dengan panel 'Tumpukan Paralel' Visual Studio.
pathto Menampilkan jalur GC dari <root> ke <target>.
pe atau printexception Menampilkan dan memformat bidang dari objek apa pun yang berasal dari kelas Exception pada alamat yang ditentukan.
r atau registers Menampilkan daftar utas.
runtimes Mencantumkan runtime dalam target atau mengubah runtime default.
setclrpath Mengatur jalur untuk memuat file coreclr dac/dbi menggunakan setclrpath <path>.
setsymbolserver Mengaktifkan dukungan server simbol.
sos Menjalankan berbagai perintah debugging coreclr. Gunakan sintaks sos <command-name> <args>. Untuk informasi selengkapnya, lihat 'soshelp'.
soshelp atau help Menampilkan semua perintah yang tersedia.
soshelp <command> atau help <command> Menampilkan perintah yang ditentukan.
syncblk Menampilkan info pemegang SyncBlock.
taskstate Menampilkan status Tugas dalam format yang dapat dibaca manusia.
threadpool Menampilkan info tentang kumpulan utas runtime.
threadpoolqueue Menampilkan item kerja kumpulan utas yang diantrekan.
threadstate Cukup mencetak arti dari status utas.
threads <threadid> atau setthread <threadid> Mengatur atau menampilkan ID utas saat ini untuk perintah SOS.
timerinfo Menampilkan informasi tentang timer yang sedang berjalan.
token2ee Menampilkan struktur MethodTable dan struktur MethodDesc untuk token dan modul yang ditentukan.
traverseheap Menulis informasi tumpukan ke file dalam format yang dipahami oleh CLR Profiler.
verifyheap Memeriksa tumpukan GC untuk tanda-tanda kerusakan.
verifyobj Memeriksa objek yang diteruskan sebagai argumen untuk tanda-tanda kerusakan.

Catatan

Detail tambahan dapat ditemukan di Ekstensi Debugging SOS untuk .NET.

dotnet-dump ps

Mencantumkan proses dotnet tempat crash dump dapat dikumpulkan. Versi 6.0.320703 dotnet-dump dan versi yang lebih baru juga menampilkan argumen baris perintah yang digunakan setiap proses, jika tersedia.

Sinopsis

dotnet-dump ps [-h|--help]

Contoh

Misalkan Anda memulai aplikasi yang berjalan lama menggunakan perintah dotnet run --configuration Release. Di jendela lain, Anda menjalankan perintah dotnet-dump ps. Output yang akan Anda lihat adalah sebagai berikut. Argumen baris perintah, jika ada, ditampilkan di versi 6.0.320703 dotnet-dump dan yang lebih baru.

> dotnet-dump ps

  21932 dotnet     C:\Program Files\dotnet\dotnet.exe   run --configuration Release
  36656 dotnet     C:\Program Files\dotnet\dotnet.exe

Menggunakan dotnet-dump

Langkah pertama adalah mengumpulkan cadangan. Langkah ini dapat dilewati jika cadangan inti telah dibuat. Sistem operasi atau fitur pembuatan dump bawaan runtime .NET Core masing-masing dapat membuat cadangan inti.

$ dotnet-dump collect --process-id 1902
Writing minidump to file ./core_20190226_135837
Written 98983936 bytes (24166 pages) to core file
Complete

Sekarang analisis crash dump inti dengan perintah 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.
>

Tindakan ini memunculkan sesi interaktif yang menerima perintah seperti:

> 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]

Untuk melihat pengecualian yang tidak tertangani yang mematikan aplikasi Anda:

> 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

Menganalisis kebocoran dan alokasi memori

Kebocoran memori terjadi ketika aplikasi Anda menyimpan referensi ke objek yang tidak lagi diperlukan, mencegah pengumpul sampah mengklaim kembali memori. Gunakan dotnet-dump untuk mengidentifikasi kebocoran memori, menemukan objek terbesar, dan memahami di mana memori sedang digunakan.

Untuk panduan lengkap men-debug kebocoran memori, lihat Debug kebocoran memori di .NET.

Mengidentifikasi objek terbesar

dumpheap Gunakan perintah dengan -stat opsi untuk melihat ringkasan objek pada timbunan, diurutkan menurut ukuran total:

> dumpheap -stat

Statistics:
              MT    Count    TotalSize Class Name
00007f6c1eeefba8      576        59904 System.Reflection.RuntimeMethodInfo
00007f6c1dc021c8     1749        95696 System.SByte[]
00000000008c9db0     3847       116080      Free
00007f6c1e784a18      175       128640 System.Char[]
00007f6c1dbf5510      217       133504 System.Object[]
00007f6c1dc014c0      467       416464 System.Byte[]
00007f6c21625038        6      4063376 testwebapi.Controllers.Customer[]
00007f6c20a67498   200000      4800000 testwebapi.Controllers.Customer
00007f6c1dc00f90   206770     19494060 System.String
Total 428516 objects

Output ini menunjukkan jenis mana yang paling banyak mengonsumsi memori. Dalam contoh ini, System.String objek mengonsumsi sekitar 19 MB, dan Customer objek mengonsumsi sekitar 4,8 MB.

Mengidentifikasi objek menurut namespace layanan atau rakitan

Untuk menemukan modul atau namespace layanan mana yang menggunakan memori, gunakan -type opsi dengan nama jenis parsial untuk memfilter hasil:

> dumpheap -type MyCompany.Data -stat

Statistics:
              MT    Count    TotalSize Class Name
00007f6c21625038    15000      3600000 MyCompany.Data.CustomerRecord
00007f6c21625040     8000      2560000 MyCompany.Data.OrderHistory
00007f6c21625048     2000       960000 MyCompany.Data.ProductCache
Total 25000 objects, 7120000 bytes

Pendekatan ini membantu Anda mengidentifikasi bagian mana dari basis kode Anda yang bertanggung jawab atas konsumsi memori.

Menemukan jumlah instansiasi tertinggi

Untuk melihat jenis mana yang memiliki instans terbanyak, terlepas dari ukuran total, lihat kolom Hitung dalam dumpheap -stat output. Objek dengan jumlah instans tinggi mungkin menunjukkan masalah pembuatan atau penembolokan objek yang tidak efisien:

> dumpheap -stat

Statistics:
              MT    Count    TotalSize Class Name
00007f6c1dc00f90   206770     19494060 System.String
00007f6c20a67498   200000      4800000 testwebapi.Controllers.Customer
00007f6c1dc021c8     1749        95696 System.SByte[]

Contoh ini menunjukkan 206.770 String instans dan 200.000 Customer instans.

Menganalisis referensi objek dengan gcroot

Setelah mengidentifikasi objek besar atau banyak, gunakan gcroot untuk mengetahui mengapa objek tidak dikumpulkan. gcroot Perintah menunjukkan rantai referensi dari akar GC ke objek tertentu:

> dumpheap -mt 00007f6c20a67498
         Address               MT     Size
00007f6ad09421f8 00007f6c20a67498       24
...

> gcroot 00007f6ad09421f8

Thread 3f68:
    00007F6795BB58A0 00007F6C1D7D0745 testwebapi.Controllers.CustomerCache.GetAll()
        rbx:  (interior)
            ->  00007F6BDFFFF038 System.Object[]
            ->  00007F69D0033570 testwebapi.Controllers.Processor
            ->  00007F69D0033588 testwebapi.Controllers.CustomerCache
            ->  00007F69D00335A0 System.Collections.Generic.List`1[[testwebapi.Controllers.Customer]]
            ->  00007F6C000148A0 testwebapi.Controllers.Customer[]
            ->  00007F6AD0942258 testwebapi.Controllers.Customer

Found 1 root.

Output ini menunjukkan bahwa Customer objek dipegang oleh CustomerCache objek, yang membantu Anda mengidentifikasi sumber kebocoran dalam kode Anda.

Menganalisis memori menurut ukuran objek

-min Gunakan opsi dan -max untuk memfilter objek menurut ukuran:

> dumpheap -min 100000 -stat

Statistics:
              MT    Count    TotalSize Class Name
00007f6c21625038        6      4063376 testwebapi.Controllers.Customer[]
00007f6c1dc014c0       12       416464 System.Byte[]
Total 18 objects

Perintah ini hanya menunjukkan objek yang lebih besar dari 100.000 byte, membantu Anda fokus pada konsumen memori terbesar.

Menemukan kebuntuan

Gunakan dotnet-dump untuk mendiagnosis situasi kebuntuan di mana utas diblokir menunggu sumber daya. Untuk panduan penelusuran kesalahan kebuntuan lengkap, lihat Debug kebuntuan di .NET.

Mencantumkan semua utas

threads Gunakan perintah untuk melihat semua utas terkelola:

> threads
*0 0x1DBFF (121855)
 1 0x1DC01 (121857)
 2 0x1DC02 (121858)
 ...

Memeriksa tumpukan utas

Gunakan clrstack -all untuk melihat tumpukan panggilan semua utas:

> clrstack -all

Cari pola di mana beberapa utas diblokir atau Monitor.Enter primitif sinkronisasi serupa.

Menemukan pemilik kunci

syncblk Gunakan perintah untuk melihat utas mana yang menahan kunci dan utas mana yang menunggu:

> syncblk
Index         SyncBlock MonitorHeld Recursion Owning Thread Info          SyncBlock Owner
   43 00000246E51268B8          603         1 0000024B713F4E30 5634  28   00000249654b14c0 System.Object
   44 00000246E5126908            3         1 0000024B713F47E0 51d4  29   00000249654b14d8 System.Object

Kolom MonitorHeld memperlihatkan jumlah utas yang menunggu kunci. Kolom Info Alur Pemilik menunjukkan utas mana yang memiliki kunci.

Skenario analisis memori tingkat lanjut

Membandingkan beberapa cadangan

Untuk memahami pertumbuhan memori dari waktu ke waktu, kumpulkan beberapa cadangan dan bandingkan:

  1. Kumpulkan cadangan garis besar: dotnet-dump collect -p <pid> -o baseline.dmp
  2. Biarkan aplikasi Anda berjalan dan mengonsumsi lebih banyak memori.
  3. Kumpulkan cadangan kedua: dotnet-dump collect -p <pid> -o after.dmp
  4. Analisis kedua cadangan dan bandingkan hasilnya dumpheap -stat .

Cari jenis yang memiliki instans yang jauh lebih banyak atau ukuran total yang lebih besar di cadangan kedua.

Menganalisis memori untuk jenis objek tertentu

Untuk mencadangkan semua instans dari jenis tertentu:

> dumpheap -type Customer
         Address               MT     Size
00007f6ad09421f8 00007f6c20a67498       24
00007f6ad0942210 00007f6c20a67498       24
...

Kemudian gunakan dumpobj untuk memeriksa objek individual:

> dumpobj 00007f6ad09421f8
Name:        testwebapi.Controllers.Customer
MethodTable: 00007f6c20a67498
EEClass:     00007f6c21625000
Size:        24(0x18) bytes
File:        /app/testwebapi.dll
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
00007f6c1dc00f90  4000001        8        System.String  0 instance 00007f6ad09421f0 Name
00007f6c1dbf4c18  4000002       10         System.Int32  1 instance               42 Id

Mengumpulkan cadangan dalam kontainer Docker

dotnet-dump ptrace membutuhkan kemampuan dalam kontainer. Cara umum untuk memberikannya adalah dengan memulai kontainer dengan --cap-add=SYS_PTRACE. Bergantung pada lingkungan Anda, Anda mungkin juga perlu menyesuaikan profil seccomp kontainer. Lihat Dumps: FAQ untuk bantuan mendiagnosis masalah konfigurasi keamanan kontainer.

Untuk menginstal dalam gambar produksi tanpa SDK .NET, gunakan tautan unduhan direct dari bagian Instal, atau gunakan build Docker tahap < multi untuk menyalin biner alat dari gambar SDK. Untuk panduan diagnostik kontainer lengkap, lihat Mengumpulkan diagnostik dalam kontainer Linux.

Pemecahan masalah pengumpulan cadangan

Pengumpulan cadangan mengharuskan proses untuk dapat memanggil ptrace. Jika Anda menghadapi masalah saat mengumpulkan cadangan, lingkungan yang Anda jalankan dapat dikonfigurasi untuk membatasi panggilan tersebut. Lihat Dumps: FAQ kami untuk tips pemecahan masalah dan solusi potensial untuk masalah umum.

Lihat juga