Bagikan melalui


Ekstensi penelusuran kesalahan SOS

Ekstensi penelusuran kesalahan SOS memungkinkan Anda melihat informasi tentang kode yang berjalan di dalam runtime .NET, baik pada proses langsung maupun cadangan. Ekstensi telah diinstal sebelumnya dengan dotnet-dump dan Windbg/dbg, dan dapat diunduh untuk digunakan dengan LLDB. Anda dapat menggunakan ekstensi penelusuran kesalahan SOS untuk:

  • Kumpulkan informasi tentang tumpukan terkelola.
  • Cari kerusakan tumpukan.
  • Tampilkan jenis data internal yang digunakan oleh runtime.
  • Lihat informasi tentang semua kode terkelola yang berjalan di dalam runtime.

Sintaks

Pada Windows: ![command] [options]

Di Linux dan macOS: sos [command] [options]

Banyak perintah memiliki alias atau pintasan di bawah lldb: clrstack [options]

Perintah

Tabel perintah berikut ini juga tersedia di bawah Bantuan atau soshelp. Bantuan perintah individual tersedia menggunakan soshelp <command>.

Perintah Deskripsi
bpmd [-nofuturemodule] [<nama> nama<>modul metode] [-md><MethodDesc] -list -clear<pending breakpoint number-clearall> Membuat titik henti pada metode yang ditentukan dalam modul yang ditentukan.

Jika modul dan metode yang ditentukan belum dimuat, perintah ini menunggu pemberitahuan bahwa modul dimuat dan just-in-time (JIT) dikompilasi sebelum membuat titik henti.

Anda dapat mengelola daftar titik henti yang tertunda dengan menggunakan opsi -list, -clear, dan -clearall:

Opsi -list menghasilkan daftar semua titik henti yang tertunda. Jika titik henti yang tertunda memiliki ID modul non-nol, titik henti tersebut khusus untuk fungsi dalam modul yang dimuat tertentu. Jika titik henti yang tertunda memiliki ID modul nol, titik henti tersebut berlaku untuk modul yang belum dimuat.

Gunakan opsi -clear atau -clearall untuk menghapus titik henti yang tertunda dari daftar.
CLRStack [-a] [-l] [-p] [-n] [-f] [-r] [-all] Menyediakan jejak tumpukan kode terkelola saja.

Opsi -p menunjukkan argumen ke fungsi terkelola.

Opsi -l menunjukkan informasi tentang variabel lokal dalam bingkai. Ekstensi penelusuran kesalahan SOS tidak dapat mengambil nama lokal, sehingga output untuk nama lokal dalam format <nilai> alamat<>=lokal.

Opsi -a adalah pintasan untuk -l dan -p gabungan.

Opsi -n menonaktifkan tampilan nama file sumber dan nomor baris. Jika debugger memiliki opsi SYMOPT_LOAD_LINES yang ditentukan, SOS akan mencari simbol untuk setiap bingkai terkelola dan jika berhasil akan menampilkan nama file sumber dan nomor baris yang sesuai. Parameter -n (Tidak ada nomor baris) dapat ditentukan untuk menonaktifkan perilaku ini.

Opsi -f (mode penuh) menampilkan bingkai asli yang mengintermiksnya dengan bingkai terkelola dan nama rakitan dan offset fungsi untuk bingkai terkelola. Opsi ini tidak menampilkan bingkai asli saat digunakan dengan dotnet-dump.

Opsi -r mencadangkan register untuk setiap bingkai tumpukan.

Opsi -all mencadangkan semua tumpukan utas terkelola.
COMState Mencantumkan model apartemen COM untuk setiap utas dan Context penunjuk, jika tersedia. Perintah ini hanya didukung pada Windows.
DumpArray [-start<startIndex>] [-length<length>] [-details] [-nofields] <alamat objek array>

-atau-

DA [-start<startIndex>] [-length<length>] [-details] [-nofields] array object address>
Memeriksa elemen objek array.

Opsi -start menentukan indeks awal untuk menampilkan elemen.

Opsi -length menentukan berapa banyak elemen yang akan ditampilkan.

Opsi -details menampilkan detail elemen menggunakan format DumpObj dan DumpVC.

Opsi -nofields mencegah array ditampilkan. Opsi ini hanya tersedia ketika opsi -detail ditentukan.
DumpAsync (dumpasync) [-mt<MethodTable address>] [-type<partial type name>] [-waiting] [-roots] DumpAsync melintasi tumpukan sampah yang dikumpulkan dan mencari objek yang mewakili mesin status asinkron seperti yang dibuat ketika status metode asinkron ditransfer ke tumpukan. Perintah ini mengenali mesin status asinkron yang didefinisikan sebagai async void, , async Taskasync Task<T>, async ValueTask, dan async ValueTask<T>.

Output mencakup blok detail untuk setiap objek komputer status asinkron yang ditemukan. Detail ini meliputi:
- Baris untuk jenis objek mesin status asinkron, termasuk alamat MethodTable, alamat objeknya, ukurannya, dan nama jenisnya.
- Baris untuk nama jenis komputer status seperti yang terkandung dalam objek.
- Daftar setiap bidang pada mesin status.
- Baris untuk kelanjutan dari objek komputer status ini, jika satu atau beberapa telah terdaftar.
- Menemukan akar GC untuk objek mesin status asinkron ini.
DumpAssembly<alamat perakitan> Menampilkan informasi tentang rakitan.

Perintah DumpAssembly mencantumkan beberapa modul, jika ada.

Anda bisa mendapatkan alamat perakitan dengan menggunakan perintah DumpDomain.
DumpClass<Alamat EEClass> Menampilkan informasi tentang EEClass struktur yang terkait dengan jenis.

Perintah DumpClass menampilkan nilai bidang statis tetapi tidak menampilkan nilai bidang nonstatis.

Gunakan perintah DumpMT, DumpObj, Name2EE, atau Token2EE untuk mendapatkan EEClass alamat struktur.
DumpDomain [<alamat domain>] Menghitung setiap Assembly objek yang dimuat dalam alamat objek yang ditentukan AppDomain . Ketika dipanggil tanpa parameter, perintah DumpDomain mencantumkan semua AppDomain objek dalam suatu proses. Karena .NET (Core) hanya memiliki satu AppDomain, DumpDomain hanya mengembalikan satu objek.
DumpHeap [-stat] [-strings] [-short] [-min<size>] [-max<size>] [-thinlock] [-startAtLowerBound] [-mt<MethodTable address>] [-type<partial type name>] [start [end]] Menampilkan informasi tentang tumpukan sampah dan statistik pengumpulan tentang objek.

Perintah DumpHeap menampilkan peringatan jika mendeteksi fragmentasi yang berlebihan dalam tumpukan pengumpul sampah.

Opsi -stat membatasi keluaran ke ringkasan jenis statistik.

Opsi -string membatasi keluaran ke ringkasan nilai string statistik.

Opsi -short membatasi keluaran hanya untuk alamat setiap objek. Ini memungkinkan Anda dengan mudah menyalurkan keluaran dari perintah ke perintah debugger lain untuk otomatisasi.

Opsi -min mengabaikan objek yang kurang dari size parameter, yang ditentukan dalam byte.

Opsi -max mengabaikan objek yang lebih besar dari size parameter, yang ditentukan dalam byte.

Opsi -thinlock melaporkan ThinLocks. Untuk informasi lebih lanjut, lihat perintah SyncBlk.

Opsi -startAtLowerBound memaksa tumpukan berjalan untuk memulai di batas bawah rentang alamat yang disediakan. Selama fase perencanaan, tumpukan sering kali tidak dapat berjalan karena objek sedang dipindahkan. Opsi ini memaksa DumpHeap untuk memulai perjalanannya di batas bawah yang ditentukan. Anda harus menyediakan alamat objek yang valid sebagai batas bawah agar opsi ini berfungsi. Anda dapat menampilkan memori di alamat objek yang buruk untuk menemukan tabel metode berikutnya secara manual. Jika pengumpulan sampah saat ini dalam panggilan ke memcopy, Anda mungkin juga dapat menemukan alamat objek berikutnya dengan menambahkan ukuran ke alamat awal, yang disediakan sebagai parameter.

Opsi -mt hanya mencantumkan objek yang sesuai dengan struktur yang ditentukan MethodTable.

Opsi -type hanya mencantumkan objek yang nama jenisnya adalah kecocokan substring dari string yang ditentukan.

Parameter start mulai mencantumkan dari alamat yang ditentukan.

Parameter end berhenti mencantumkan di alamat yang ditentukan.
DumpIL<Objek DynamicMethod Terkelola> | <Penunjuk DynamicMethodDesc> | <Penunjuk MethodDesc> Menampilkan bahasa perantara umum (CIL) yang terkait dengan metode terkelola.

Dynamic CIL dipancarkan secara berbeda dari CIL yang dimuat dari rakitan. Dynamic CIL mengacu pada objek dalam array objek terkelola daripada token metadata.
DumpLog [-addr<addressOfStressLog>] [<Filename>] Menulis konten log tekanan dalam memori ke file yang ditentukan. Jika Anda tidak menentukan nama, perintah ini akan membuat file yang disebut StressLog.txt di direktori saat ini.

Log tekanan dalam memori membantu Anda mendiagnosis kegagalan stres tanpa menggunakan kunci atau I/O. Untuk mengaktifkan log tekanan, atur kunci registri berikut di bawah HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework:

(DWORD) StressLog = 1

(DWORD) LogFacility = 0xffffffff

(DWORD) StressLogSize = 65536

Opsi opsional -addr memungkinkan Anda menentukan log tekanan selain log default.
DumpMD<Alamat MethodDesc> Menampilkan informasi tentang MethodDesc struktur pada alamat yang ditentukan.

Anda dapat menggunakan perintah IP2MD untuk mendapatkan MethodDesc alamat struktur dari fungsi terkelola.
Alamat DumpMT [-MD] <MethodTable> Menampilkan informasi tentang tabel metode pada alamat yang ditentukan. Menentukan opsi -MD menampilkan daftar semua metode yang ditentukan dengan objek.

Setiap objek terkelola berisi penunjuk tabel metode.
DumpModule [-mt] <Alamat modul> Menampilkan informasi tentang modul pada alamat yang ditentukan. Opsi -mt menampilkan jenis yang ditentukan dalam modul dan jenis yang dirujuk oleh modul

Anda dapat menggunakan perintah DumpDomain atau DumpAssembly untuk mengambil alamat modul.
DumpObj [-nofields] <alamat objek>

-atau-

DO<alamat objek>
Menampilkan informasi tentang objek pada alamat yang ditentukan. Perintah DumpObj menampilkan bidang, EEClass informasi struktur, tabel metode, dan ukuran objek.

Anda dapat menggunakan perintah DumpStackObjects untuk mengambil alamat objek.

Anda dapat menjalankan perintah DumpObj pada bidang jenis CLASS karena juga merupakan objek.

Opsi -nofields mencegah bidang objek ditampilkan, ini berguna untuk objek seperti String.
DumpRuntimeTypes Menampilkan objek jenis runtime bahasa umum dalam tumpukan pengumpul sampah dan mencantumkan nama jenis dan tabel metode terkait.
DumpStack [-EE] [-n] [top stack [bottom stack]] Menampilkan pelacakan tumpukan.

Opsi -EE menyebabkan perintah DumpStack hanya menampilkan fungsi terkelola. Gunakan parameter top dan bottom untuk membatasi bingkai tumpukan yang ditampilkan pada platform x86.

Opsi -n menonaktifkan tampilan nama file sumber dan nomor baris. Jika debugger memiliki opsi SYMOPT_LOAD_LINES yang ditentukan, SOS akan mencari simbol untuk setiap bingkai terkelola dan jika berhasil akan menampilkan nama file sumber dan nomor baris yang sesuai. Parameter -n (Tidak ada nomor baris) dapat ditentukan untuk menonaktifkan perilaku ini.
DumpSig<sigaddr><moduleaddr> Menampilkan informasi tentang Sig struktur pada alamat yang ditentukan.
DumpSigElem<sigaddr><moduleaddr> Menampilkan elemen tunggal objek tanda tangan. Dalam kebanyakan kasus, Anda harus menggunakan DumpSig untuk melihat objek tanda tangan individual. Namun, jika tanda tangan telah rusak dalam beberapa cara, Anda dapat menggunakan DumpSigElem untuk membaca bagian yang valid.
DumpStackObjects [-verify] [top stack [bottom stack]]

-atau-

DSO [-verify] [top stack [bottom stack]]
Menampilkan semua objek terkelola yang ditemukan di dalam batas tumpukan saat ini.

Opsi -verify memvalidasi setiap bidang non-statis CLASS dari bidang objek.

Gunakan perintah DumpStackObject dengan perintah pelacakan tumpukan seperti K (windbg) atau bt (lldb) bersama dengan perintah clrstack untuk menentukan nilai variabel dan parameter lokal.
DumpVC<Alamat MethodTable><Alamat> Menampilkan informasi tentang bidang kelas nilai pada alamat yang ditentukan.

Parameter MethodTable memungkinkan perintah DumpVC untuk menginterpretasikan bidang dengan benar. Kelas nilai tidak memiliki tabel metode sebagai bidang pertamanya.
EEHeap [-gc] [-loader] Menampilkan informasi tentang memori proses yang digunakan oleh struktur data runtime internal.

Opsi -gc dan -loader membatasi keluaran perintah ini ke pengumpul sampah atau struktur data pemuat.

Informasi untuk pengumpul sampah mencantumkan rentang setiap segmen dalam tumpukan terkelola. Jika penunjuk berada dalam rentang segmen yang diberikan oleh -gc, penunjuk adalah penunjuk objek.
EEStack [-short] [-EE] Menjalankan perintah DumpStack pada semua utas dalam proses.

Opsi -EE diteruskan langsung ke perintah DumpStack. Parameter -short membatasi keluaran ke jenis utas berikut:

Utas yang telah mengambil kunci.

Utas yang telah terhenti agar memungkinkan pengumpulan sampah.

Utas yang saat ini berada dalam kode terkelola.
EHInfo [<MethodDesc address>] [<Code address>] Menampilkan blok penanganan pengecualian dalam metode yang ditentukan. Perintah ini menampilkan alamat kode dan offset untuk blok klausul ( try blok) dan blok penanganan ( catch blok).
FAQ Menampilkan pertanyaan yang sering diajukan. Tidak didukung dalam dotnet-dump.
FinalizeQueue [-detail] | [-allReady] [-short] Menampilkan semua objek yang terdaftar untuk finalisasi.

Opsi -detail menampilkan informasi tambahan tentang apa pun SyncBlocks yang perlu dibersihkan, dan apa pun RuntimeCallableWrappers (RCW) yang menunggu pembersihan. Kedua struktur data ini di-cache dan dibersihkan oleh utas penyelesai saat berjalan.

Opsi -allReady menampilkan semua objek yang siap untuk diselesaikan, terlepas dari apakah objek tersebut sudah ditandai oleh pengumpulan sampah, atau akan ditandai dengan pengumpulan sampah berikutnya. Objek yang ada dalam daftar "siap untuk finalisasi" adalah objek yang dapat diselesaikan yang tidak lagi berakar. Opsi ini bisa sangat mahal, karena memverifikasi apakah semua objek dalam antrean yang dapat diselesaikan masih berakar.

Opsi -short membatasi keluaran ke alamat setiap objek. Jika digunakan bersama dengan -allReady, itu menghitung semua objek yang memiliki penyelesai yang tidak lagi berakar. Jika digunakan secara independen, ia mencantumkan semua objek dalam antrean yang dapat diselesaikan dan "siap untuk finalisasi".
FindAppDomain<Alamat objek> Menentukan domain aplikasi objek pada alamat yang ditentukan.
FindRoots -gen<N> | -gen apa pun |<alamat objek> Menyebabkan debugger rusak dalam debuggee pada koleksi berikutnya dari generasi yang ditentukan. Efeknya diatur ulang segera setelah jeda terjadi. Untuk memutuskan koleksi berikutnya, Anda harus membuat ulang perintah. Bentuk <alamat objek> dari perintah ini digunakan setelah jeda yang disebabkan oleh -gen atau -gen apa pun telah terjadi. Pada saat itu, debuggee berada dalam status yang tepat bagi FindRoots untuk mengidentifikasi akar objek dari generasi yang dikutuk saat ini. Hanya didukung pada Windows.
GCHandles [-perdomain] Menampilkan statistik tentang handel pengumpul sampah dalam prosesnya.

Opsi -perdomain mengatur statistik menurut domain aplikasi.

Gunakan perintah GCHandles untuk menemukan kebocoran memori yang disebabkan oleh kebocoran handel pengumpul sampah. Misalnya, kebocoran memori terjadi ketika kode mempertahankan array besar karena handel pengumpul sampah yang kuat masih menunjuk ke dalamnya, dan handel dibuang tanpa membebaskannya.

Hanya didukung pada Windows.
GCHandleLeaks Mencari memori untuk referensi apa pun ke handel pengumpul sampah yang kuat dan disematkan dalam proses dan menampilkan hasilnya. Jika handel ditemukan, perintah GCHandleLeaks menampilkan alamat referensi. Jika handel tidak ditemukan dalam memori, perintah ini akan menampilkan pemberitahuan. Hanya didukung pada Windows.
GCInfo<Alamat MethodDesc><Alamat kode> Menampilkan data yang menunjukkan kapan lokasi register atau tumpukan berisi objek terkelola. Jika pengumpulan sampah terjadi, kolektor harus mengetahui lokasi referensi ke objek sehingga dapat memperbaruinya dengan nilai penunjuk objek baru.
GCRoot [-nostacks] [-all] <Alamat objek> Menampilkan informasi tentang referensi (atau akar) ke objek pada alamat yang ditentukan.

Perintah GCRoot memeriksa seluruh tumpukan terkelola dan tabel handel untuk handel dalam objek lain dan handel pada tumpukan. Setiap tumpukan kemudian dicari penunjuk ke objek, dan antrean penyelesai juga dicari.

Perintah ini tidak menentukan apakah akar tumpukan valid atau dibuang. Gunakan perintah clrstack dan U untuk membongkar bingkai tempat nilai lokal atau argumen berada untuk menentukan apakah akar tumpukan masih digunakan.

Opsi -nostacks membatasi pencarian ke handel pengumpul sampah dan objek yang dapat dijangkau.

Opsi -all memaksa semua akar ditampilkan alih-alih hanya akar yang unik.
Alamat objek GCWhere< > Menampilkan lokasi dan ukuran dalam tumpukan kumpulan sampah dari argumen yang diteruskan. Ketika argumen terletak di tumpukan terkelola tetapi bukan alamat objek yang valid, ukuran ditampilkan sebagai 0 (nol).
Bantuan (soshelp) [<perintah>] [faq] Menampilkan semua perintah yang tersedia ketika tidak ada parameter yang ditentukan, atau menampilkan informasi bantuan terperinci tentang perintah yang ditentukan.

Parameter faq menampilkan jawaban atas pertanyaan yang sering diajukan.
HeapStat [-inclUnrooted | -iu] Menampilkan ukuran pembuatan untuk setiap tumpukan dan total ruang kosong di setiap generasi pada setiap tumpukan. Jika opsi -inclUnrooted ditentukan, laporan menyertakan informasi tentang objek terkelola dari tumpukan pengumpulan sampah yang tidak lagi berakar. Hanya didukung pada Windows.
HistClear Merilis sumber daya apa pun yang digunakan oleh keluarga Hist perintah.

Umumnya, Anda tidak perlu secara eksplisit memanggil HistClear, karena masing-masing HistInit membersihkan sumber daya sebelumnya.
HistInit Menginisialisasi struktur SOS dari log tekanan yang disimpan dalam debuggee.
histObj <obj_address> Memeriksa semua catatan relokasi log tekanan dan menampilkan rantai relokasi pengumpulan sampah yang mungkin menyebabkan alamat yang diteruskan sebagai argumen.
HistObjFind <obj_address> Menampilkan semua entri log yang mereferensikan objek pada alamat yang ditentukan.
Akar HistRoot <> Menampilkan informasi yang terkait dengan promosi dan relokasi akar yang ditentukan.

Nilai akar dapat digunakan untuk melacak pergerakan objek melalui pengumpulan sampah.
Alamat Kode IP2MD (ip2md) <> Menampilkan MethodDesc struktur pada alamat yang ditentukan dalam kode yang telah dikompilasi JIT.
Obj_address ListNearObj (lno) <> Menampilkan objek sebelumnya dan mengikuti alamat yang ditentukan. Perintah mencari alamat dalam tumpukan pengumpulan sampah yang terlihat seperti awal objek terkelola yang valid (berdasarkan tabel metode yang valid) dan objek yang mengikuti alamat argumen. Hanya didukung pada Windows.
MinidumpMode [0] [1] Mencegah menjalankan perintah yang tidak aman saat menggunakan minidump.

Teruskan 0 untuk menonaktifkan fitur ini atau 1 untuk mengaktifkan fitur ini. Secara default, nilai MinidumpMode diatur ke 0.

Minidump yang dibuat dengan perintah .dump /m atau perintah .dump memiliki data khusus CLR terbatas dan memungkinkan Anda untuk hanya menjalankan subset perintah SOS dengan benar. Beberapa perintah mungkin gagal dengan kesalahan tak terduga karena area memori yang diperlukan tidak dipetakan atau hanya dipetakan sebagian. Opsi ini melindungi Anda dari menjalankan perintah yang tidak aman terhadap minidump.

Hanya didukung dengan Windbg.
Jenis nama><modul name2EE (name2ee) <atau nama metode>

-atau-

Name2EE<nama modul>!<nama jenis atau metode>
Menampilkan MethodTable struktur dan EEClass struktur untuk jenis atau metode yang ditentukan dalam modul yang ditentukan.

Modul yang ditentukan harus dimuat dalam proses.

Untuk mendapatkan nama jenis yang tepat, telusuri modul dengan menggunakan Ildasm.exe (Bahasa perantara Disassembler). Anda juga dapat meneruskan * sebagai parameter nama modul untuk mencari semua modul terkelola yang dimuat. Parameter nama modul juga dapat menjadi nama debugger untuk modul, seperti mscorlib atau image00400000.

Perintah ini mendukung sintaks debugger Windows dari <module>!<type>. Jenis harus sepenuhnya memenuhi syarat.
ObjSize [<Object address>] | [-aggregate] [-stat] Menampilkan ukuran objek yang ditentukan. Jika Anda tidak menentukan parameter apa pun, perintah ObjSize menampilkan ukuran semua objek yang ditemukan pada utas terkelola, menampilkan semua handel pengumpul sampah dalam proses, dan menjumlahkan ukuran objek apa pun yang diarahkan oleh handel tersebut. Perintah ObjSize mencakup ukuran semua objek turunan selain induk.

Opsi -aggregate dapat digunakan bersama dengan argumen -stat untuk mendapatkan tampilan terperinci dari jenis yang masih berakar. Dengan menggunakan !dumpheap -stat dan !objsize -aggregate -stat, Anda dapat menentukan objek mana yang tidak lagi berakar dan mendiagnosis berbagai masalah memori.

Hanya didukung pada Windows.
PrintException [-nested] [-lines] [<Exception object address>]

-atau-

PE [-nested] [<Exception object address>]
Menampilkan dan memformat bidang dari objek apa pun yang berasal dari kelas Exception pada alamat yang ditentukan. Jika Anda tidak menentukan alamat, perintah PrintException menampilkan pengecualian terakhir yang dilemparkan pada utas saat ini.

Opsi -nested menampilkan detail tentang objek pengecualian berlapis.

Opsi -lines menampilkan informasi sumber, jika tersedia.

Anda dapat menggunakan perintah ini untuk memformat dan melihat _stackTrace bidang, yang merupakan array biner.
ProcInfo [-env] [-time] [-mem] Menampilkan variabel lingkungan untuk proses, waktu CPU kernel, dan statistik penggunaan memori. Hanya didukung dengan Windbg.
RCWCleanupList<Alamat RCWCleanupList> Menampilkan daftar pembungkus yang dapat dipanggil runtime bahasa umum pada alamat yang ditentukan yang menunggu pembersihan. Hanya didukung dengan Windbg.
SaveModule<Alamat dasar><Filename> Menulis gambar, yang dimuat dalam memori pada alamat yang ditentukan, ke file yang ditentukan. Hanya didukung dengan Windbg.
SetHostRuntime [<runtime-directory>] Perintah ini mengatur jalur ke runtime .NET untuk digunakan untuk menghosting kode terkelola yang berjalan sebagai bagian dari SOS di debugger (lldb). Runtime harus setidaknya versi 2.1.0 atau lebih tinggi. Jika ada spasi dalam direktori, spasi harus dikutip tunggal (').

Biasanya, SOS mencoba menemukan runtime .NET yang diinstal untuk menjalankan kode terkelolanya secara otomatis tetapi perintah ini tersedia jika gagal. Defaultnya adalah menggunakan runtime yang sama (libcoreclr) yang sedang di-debug. Gunakan perintah ini jika runtime default yang di-debug tidak cukup berfungsi untuk menjalankan kode SOS atau jika versinya kurang dari 2.1.0.

Jika Anda menerima pesan kesalahan berikut saat menjalankan perintah SOS, gunakan perintah ini untuk mengatur jalur ke 2.1.0 atau runtime .NET yang lebih besar.

(lldb) clrstack
Error: Fail to initialize CoreCLR 80004005 ClrStack failed

(lldb) sethostruntime /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.6

Anda dapat menggunakan "dotnet --info" dalam shell perintah untuk menemukan jalur runtime .NET yang diinstal.
SetSymbolServer [-ms] [-disable] [-log] [-loadsymbols] [-cache<cache-path>] [-directory<search-directory>] [-sympath<windows-symbol-path>] [<symbol-server-URL>] Mengaktifkan dukungan pengunduhan server simbol.

Opsi -ms memungkinkan pengunduhan dari server simbol Microsoft publik.

Opsi -disable mengaktifkan dukungan unduhan simbol.

Opsi -cache<cache-path> menentukan direktori singgahan simbol. Defaultnya adalah $HOME/.dotnet/symbolcache jika tidak ditentukan.

Opsi -directory menambahkan jalur untuk mencari simbol. Bisa lebih dari satu.

Opsi -sympath menambahkan jalur server, cache, dan direktori dalam format jalur simbol Windows.

Opsi -log memungkinkan pengelogan unduhan simbol.

Opsi -loadsymbols mencoba mengunduh simbol .NET asli untuk runtime. Didukung pada lldb dan dotnet-dump.
SOSFlush Membersihkan cache SOS internal.
SOSStatus [-reset] Menampilkan status SOS internal atau mengatur ulang status singgahan internal.
StopOnException [-derived] [-create | -create2] <Pengecualian><Nomor register semu> Menyebabkan debugger berhenti ketika pengecualian yang ditentukan dilemparkan, tetapi untuk terus berjalan ketika pengecualian lain dilemparkan.

Opsi -turunan menangkap pengecualian yang ditentukan dan setiap pengecualian yang berasal dari pengecualian yang ditentukan.

Hanya didukung dengan Windbg.
SyncBlk [-all | <syncblk number>] Menampilkan SyncBlock struktur yang ditentukan atau semua SyncBlock struktur. Jika Anda tidak meneruskan argumen apa pun, perintah SyncBlk menampilkan SyncBlock struktur yang sesuai dengan objek yang dimiliki oleh utas.

Struktur SyncBlock adalah kontainer untuk informasi tambahan yang tidak perlu dibuat untuk setiap objek. Struktur dapat menyimpan data interop COM, digest, dan informasi penguncian untuk operasi yang aman untuk utas.
ThreadPool Menampilkan informasi tentang kumpulan utas terkelola, termasuk jumlah permintaan kerja dalam antrean, jumlah utas port penyelesaian, dan jumlah timer.
Threads (clrthreads) [-live] [-special] Menampilkan semua utas terkelola dalam proses.

Perintah Utas menampilkan ID singkat debugger, ID utas CLR, dan ID utas sistem operasi. Selain itu, perintah Utas menampilkan kolom Domain yang menunjukkan domain aplikasi tempat utas dijalankan, kolom APT yang menampilkan mode apartemen COM, dan kolom Pengecualian yang menampilkan pengecualian terakhir yang dilemparkan dalam utas.

Opsi -live menampilkan utas yang terkait dengan utas langsung.

Opsi -special menampilkan semua utas khusus yang dibuat oleh CLR. Utas khusus termasuk utas pengumpulan sampah (dalam pengumpulan sampah bersamaan dan server), utas pembantu debugger, utas penyelesai, AppDomain utas bongkar, dan utas timer kumpulan utas.
Bidang nilai Status ThreadState < > Menampilkan status utas. Parameter value adalah nilai State bidang dalam keluaran laporan Utas.
Token2EE<nama modul><Token> Mengubah token metadata yang ditentukan dalam modul yang ditentukan menjadi MethodTable struktur atau MethodDesc struktur.

Anda dapat meneruskan * parameter nama modul untuk menemukan apa yang dipetakan token tersebut di setiap modul terkelola yang dimuat. Anda juga dapat meneruskan nama debugger untuk modul, seperti mscorlib atau image00400000.
U [-gcinfo] [-ehinfo] [-n] <alamat MethodDesc> | <Alamat kode> Menampilkan pembongkaran anotasi dari metode terkelola yang ditentukan baik oleh MethodDesc penunjuk struktur untuk metode atau dengan alamat kode dalam isi metode. Perintah U menampilkan seluruh metode dari awal hingga akhir, dengan anotasi yang mengonversi token metadata menjadi nama.

Opsi -gcinfo menyebabkan perintah U menampilkan GCInfo struktur untuk metode.

Opsi -ehinfo menampilkan informasi pengecualian untuk metode. Anda juga dapat memperoleh informasi ini dengan perintah EHInfo.

Opsi -n menonaktifkan tampilan nama file sumber dan nomor baris. Jika debugger memiliki opsi SYMOPT_LOAD_LINES ditentukan, SOS mencari simbol untuk setiap bingkai terkelola dan, jika berhasil, menampilkan nama file sumber dan nomor baris yang sesuai. Anda dapat menentukan opsi -n untuk menonaktifkan perilaku ini.
VerifyHeap Memeriksa tumpukan pengumpul sampah untuk tanda-tanda kerusakan dan menampilkan kesalahan apa pun yang ditemukan.

Kerusakan timbunan dapat disebabkan oleh panggilan pemanggilan platform yang salah dibangun.
VerifyObj<alamat objek> Memeriksa objek yang diteruskan sebagai argumen untuk tanda-tanda kerusakan. Hanya didukung pada Windows.
VMMap Melintasi ruang alamat virtual dan menampilkan jenis perlindungan yang diterapkan ke setiap wilayah. Hanya didukung dengan Windbg.
VMStat Menyediakan tampilan ringkasan ruang alamat virtual, yang diurutkan berdasarkan setiap jenis perlindungan yang diterapkan ke memori tersebut (gratis, dicadangkan, berkomitmen, privat, dipetakan, gambar). Kolom TOTAL menampilkan hasil kolom AVERAGE dikalikan dengan kolom BLK COUNT. Hanya didukung dengan Windbg.

Dotnet-Dump

Untuk daftar perintah SOS yang tersedia dengan dotnet-dump analyze, lihat dotnet-dump.

Windows Debugger

Anda juga dapat menggunakan ekstensi penelusuran kesalahan SOS dengan memuatnya ke debugger WinDbg/dbg dan menjalankan perintah dalam debugger Windows. Perintah SOS dapat digunakan pada proses langsung atau cadangan.

Windbg harus memuat ekstensi SOS secara otomatis setiap kali proses yang di-debug berisi runtime .NET (coreclr.dll atau libcoreclr.so).

LLDB Debugger

Untuk petunjuk tentang mengonfigurasi SOS untuk LLDB, lihat dotnet-sos. Perintah SOS dapat digunakan pada proses langsung atau cadangan.

Secara default Anda dapat menjangkau semua perintah SOS dengan memasukkan: sos [command_name]. Namun, perintah umum telah diberi alias sehingga Anda tidak memerlukan awalan sos :

Perintah Fungsi
analyzeoom Menampilkan info OOM terakhir yang terjadi pada permintaan alokasi ke tumpukan GC.
bpmd Membuat titik henti pada metode terkelola yang ditentukan dalam modul yang ditentukan.
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.
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.
dumpstack Menampilkan jejak tumpukan asli dan terkelola.
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 dumpstack Berjalan pada semua utas dalam proses.
eeversion Menampilkan informasi tentang versi runtime dan SOS.
ehinfo Menampilkan blok penanganan pengecualian dalam metode JIT-ed.
finalizequeue Menampilkan semua objek yang terdaftar untuk finalisasi.
findappdomain Mencoba mengatasi AppDomain objek GC.
findroots Menemukan dan menampilkan akar objek di seluruh koleksi 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.
loadsymbols Memuat simbol modul asli .NET.
logging Mengaktifkan/menonaktifkan pengelogan SOS internal.
name2ee MethodTable Menampilkan struktur 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 Visual Studio 'Parallel Stacks'.
pathto Menampilkan jalur GC dari <root> ke <target>.
pe Menampilkan dan memformat bidang dari objek apa pun yang berasal dari kelas Exception pada alamat yang ditentukan.
printexception Menampilkan dan memformat bidang dari objek apa pun yang berasal dari kelas Exception pada alamat yang ditentukan.
runtimes Mencantumkan runtime dalam target atau mengubah runtime default.
stoponcatch Proses target akan memutus waktu berikutnya pengecualian terkelola tertangkap selama eksekusi.
setclrpath Mengatur jalur untuk memuat file coreclr dac/dbi. setclrpath <path>.
sethostruntime Mengatur atau menampilkan direktori runtime .NET yang akan digunakan untuk menjalankan kode terkelola di SOS.
setsymbolserver Mengaktifkan dukungan server simbol.
setsostid Mengatur indeks id/utas OS saat ini alih-alih menggunakan satu lldb yang disediakan. setsostid <tid> <index>.
sos Menjalankan berbagai perintah debugging coreclr. Gunakan sintaks .sos <command-name> <args> Untuk informasi selengkapnya, lihat 'soshelp'.
soshelp Menampilkan semua perintah yang tersedia ketika tidak ada parameter yang ditentukan, atau menampilkan informasi bantuan terperinci tentang perintah yang ditentukan: soshelp <command>.
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.
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.

Penggunaan contoh windbg/cdb

Perintah Deskripsi
!dumparray -start 2 -length 5 -details 00ad28d0 Menampilkan konten array di alamat 00ad28d0. Tampilan dimulai dari elemen kedua dan berlanjut untuk lima elemen.
!dumpassembly 1ca248 Menampilkan konten rakitan di alamat 1ca248.
!dumpheap Menampilkan informasi tentang tumpukan pengumpul sampah.
!DumpLog Menulis konten log stres dalam memori ke file (default) yang disebut StressLog.txt di direktori saat ini.
!dumpmd 902f40 MethodDesc Menampilkan struktur di alamat 902f40.
!dumpmodule 1caa50 Menampilkan informasi tentang modul di alamat 1caa50.
!DumpObj a79d40 Menampilkan informasi tentang objek di alamat a79d40.
!DumpVC 0090320c 00a79d9c Menampilkan bidang kelas nilai di alamat 00a79d9c menggunakan tabel metode di alamat 0090320c.
!eeheap -Gc Menampilkan memori proses yang digunakan oleh pengumpul sampah.
!finalizequeue Menampilkan semua objek yang dijadwalkan untuk finalisasi.
!findappdomain 00a79d98 Menentukan domain aplikasi objek di alamat 00a79d98.
!gcinfo 5b68dbb8 Menampilkan semua handel pengumpul sampah dalam proses saat ini.
!name2ee unittest.exe MainClass.Main MethodTable Menampilkan struktur dan EEClass untuk Main metode di kelas MainClass dalam modul unittest.exe.
!token2ee unittest.exe 02000003 Menampilkan informasi tentang token metadata di alamat 02000003 dalam modul unittest.exe.

Contoh penggunaan LLDB

Perintah Deskripsi
dumparray -start 2 -length 5 -details 00ad28d0 Menampilkan konten array di alamat 00ad28d0. Tampilan dimulai dari elemen kedua dan berlanjut untuk lima elemen.
dumpassembly 1ca248 Menampilkan konten rakitan di alamat 1ca248.
dumpheap Menampilkan informasi tentang tumpukan pengumpul sampah.
dumplog Menulis konten log stres dalam memori ke file (default) yang disebut StressLog.txt di direktori saat ini.
dumpmd 902f40 MethodDesc Menampilkan struktur di alamat 902f40.
dumpmodule 1caa50 Menampilkan informasi tentang modul di alamat 1caa50.
dumpobj a79d40 Menampilkan informasi tentang objek di alamat a79d40.
dumpvc 0090320c 00a79d9c Menampilkan bidang kelas nilai di alamat 00a79d9c menggunakan tabel metode di alamat 0090320c.
eeheap -gc Menampilkan memori proses yang digunakan oleh pengumpul sampah.
findappdomain 00a79d98 Menentukan domain aplikasi objek di alamat 00a79d98.
gcinfo 5b68dbb8 Menampilkan semua handel pengumpul sampah dalam proses saat ini.
name2ee unittest.exe MainClass.Main MethodTable Menampilkan struktur dan EEClass untuk Main metode di kelas MainClass dalam modul unittest.exe.
token2ee unittest.exe 02000003 Menampilkan informasi tentang token metadata di alamat 02000003 dalam modul unittest.exe.
clrthreads Menampilkan utas terkelola.

Lihat juga