Bagikan melalui


SOS.dll (ekstensi penelusuran kesalahan SOS)

Penting

Artikel ini menyangkut versi .NET Framework dari ekstensi penelusuran kesalahan SOS. Untuk informasi tentang alat versi .NET (Core) yang lebih baru, lihat ekstensi penelusuran kesalahan SOS.

Ekstensi penelusuran kesalahan SOS (SOS.dll) membantu Anda men-debug program terkelola di Visual Studio dan di debugger Windows (WinDbg.exe) dengan memberikan informasi tentang lingkungan Common Language Runtime (CLR) internal. Alat ini mengharuskan proyek Anda mengaktifkan penelusuran kesalahan yang tidak terkelola. SOS.dll dipasang secara otomatis dengan .NET Framework. Untuk menggunakan SOS.dll di Visual Studio, pasang Windows Driver Kit (WDK).

Sintaks

![command] [options]

Perintah

Perintah Deskripsi
AnalyzeOOM (ao) Menampilkan informasi untuk memori terakhir (OOM) yang terjadi pada permintaan alokasi ke tumpukan pengumpulan sampah. (Dalam pengumpulan sampah server, ini akan menampilkan OOM, jika ada, pada setiap tumpukan pengumpulan sampah.)
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] 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 keluaran untuk nama lokal berada dalam format <nilai>=<alamat lokal>.

Opsi -a(semua) adalah pintasan untuk gabungan -l dan -p.

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.

Ekstensi Penelusuran Kesalahan SOS tidak menampilkan bingkai transisi pada platform berbasis x64 dan IA-64.
COMState Mencantumkan model apartemen COM untuk setiap utas dan Context penunjuk, jika tersedia.
DumpArray [-start<startIndex>] [-length<length>] [-details] [-nofields] <alamat objek array>

-atau-

DA [-start<startIndex>] [-length<]> [-detail] [-nofields] alamat objek array>
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.
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.
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 (hex).

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

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.

Perhatikan bahwa CIL dinamis 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.
DumpMethodSig<sigaddr><moduleaddr> Menampilkan informasi tentang MethodSig struktur pada alamat yang ditentukan.
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.

Perhatikan bahwa Anda dapat menjalankan perintah DumpObj pada bidang jenis CLASS karena bidang jenis 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.

Pada platform x86 dan x64, perintah DumpStack membuat jejak tumpukan berlebihan.

Pada platform berbasis IA-64, perintah DumpStack meniru perintah K debugger. Parameter top dan bottom diabaikan pada platform berbasis IA-64.
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 perintah K dan 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 CLR 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.
EEVersion Menampilkan versi CLR.
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.
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.
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.
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.
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] <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.
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 [<command>] [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.
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.
IP2MD<Alamat kode> Menampilkan MethodDesc struktur pada alamat yang ditentukan dalam kode yang telah dikompilasi JIT.
ListNearObj (lno) <obj_address> 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.
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.
Name2EE<nama modul><nama jenis atau 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.
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.
RCWCleanupList<Alamat RCWCleanupList> Menampilkan daftar pembungkus yang dapat dipanggil runtime bahasa umum pada alamat yang ditentukan yang menunggu pembersihan.
SaveModule<Alamat dasar><Filename> Menulis gambar, yang dimuat dalam memori pada alamat yang ditentukan, ke file yang ditentukan.
SOSFlush Membersihkan cache SOS 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.
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.
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.
Utas [-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.

Contoh:

0:003> !Threads ThreadCount: 2 UnstartedThread: 0 BackgroundThread: 1 PendingThread: 0 DeadThread: 0 Hosted Runtime: no PreEmptive GC Alloc Lock ID OSID ThreadOBJ State GC Context Domain Count APT Exception 0 1 250 0019b068 a020 Disabled 02349668:02349fe8 0015def0 0 MTA 2 2 944 001a6020 b220 Enabled 00000000:00000000 0015def0 0 MTA (Finalizer) 0:003> !ThreadState b220 Legal to Join Background CLR Owns CoInitialized In Multi Threaded Apartment
TraverseHeap [-xml] <filename> Menulis informasi tumpukan ke file yang ditentukan dalam format yang dipahami oleh pembuat profil CLR. Opsi -xml menyebabkan perintah TraverseHeap memformat file sebagai XML.
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.
VMMap Melintasi ruang alamat virtual dan menampilkan jenis perlindungan yang diterapkan ke setiap wilayah.
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.

Keterangan

Ekstensi Penelusuran Kesalahan SOS memungkinkan Anda melihat informasi tentang kode yang berjalan di dalam CLR. Misalnya, Anda dapat menggunakan Ekstensi Penelusuran Kesalahan SOS untuk menampilkan informasi tentang tumpukan terkelola, mencari kerusakan tumpukan, menampilkan jenis data internal yang digunakan oleh runtime bahasa umum, dan melihat informasi tentang semua kode terkelola yang berjalan di dalam runtime bahasa umum.

Untuk menggunakan Ekstensi Penelusuran Kesalahan SOS di Visual Studio, pasang Windows Driver Kit (WDK). Untuk informasi tentang lingkungan penelusuran kesalahan terintegrasi di Visual Studio, lihat Lingkungan Debugging.

Anda juga dapat menggunakan Ekstensi Penelusuran Kesalahan SOS dengan memuatnya ke debugger WinDbg.exe dan menjalankan perintah dalam WinDbg.exe.

Untuk memuat Ekstensi Penelusuran Kesalahan SOS ke debugger WinDbg.exe, jalankan perintah berikut di alat:

.loadby sos clr

WinDbg.exe dan Visual Studio menggunakan versi SOS.dll yang sesuai dengan versi Mscorwks.dll yang saat ini digunakan. Secara default, Anda harus menggunakan versi SOS.dll yang cocok dengan versi Mscorwks.dll saat ini.

Untuk menggunakan file cadangan yang dibuat di komputer lain, pastikan bahwa file Mscorwks.dll yang disertakan dengan penginstalan tersebut ada di jalur simbol Anda, dan memuat versi SOS.dll yang sesuai.

Untuk memuat versi SOS.dll tertentu, ketik perintah berikut ke dalam Windows Debugger:

.load <full path to sos.dll>

Contoh

Perintah berikut menampilkan konten array di alamat 00ad28d0. Tampilan dimulai dari elemen kedua dan berlanjut untuk lima elemen.

!dumparray -start 2 -length 5 -detail 00ad28d0

Perintah berikut menampilkan konten rakitan di alamat 1ca248.

!dumpassembly 1ca248

Perintah berikut menampilkan informasi tentang tumpukan pengumpul sampah.

!dumpheap

Perintah berikut menulis konten log tekanan dalam memori ke file (default) yang disebut StressLog.txt di direktori saat ini.

!DumpLog

Perintah berikut menampilkan MethodDesc struktur di alamat 902f40.

!dumpmd 902f40

Perintah berikut menampilkan informasi tentang modul di alamat 1caa50.

!dumpmodule 1caa50

Perintah berikut menampilkan informasi tentang objek di alamat a79d40.

!DumpObj a79d40

Perintah berikut menampilkan bidang kelas nilai di alamat 00a79d9c menggunakan tabel metode di alamat 0090320c.

!DumpVC 0090320c 00a79d9c

Perintah berikut menampilkan memori proses yang digunakan oleh pengumpul sampah.

!eeheap -gc

Perintah berikut menampilkan semua objek yang dijadwalkan untuk finalisasi.

!finalizequeue

Perintah berikut menentukan domain aplikasi objek di alamat 00a79d98.

!findappdomain 00a79d98

Perintah berikut menampilkan semua handel pengumpul sampah dalam proses saat ini.

!gcinfo 5b68dbb8

Perintah berikut menampilkan struktur MethodTable dan EEClass untuk metode Main di kelas MainClass dalam modul unittest.exe.

!name2ee unittest.exe MainClass.Main

Perintah berikut menampilkan informasi tentang token metadata di alamat 02000003 dalam modul unittest.exe.

!token2ee unittest.exe 02000003

Lihat juga