Tidak dapat memuat SOS di WinDbg


132

Latar Belakang: Saya baru di WinDbg dan mencoba menjalankannya untuk pertama kalinya. Saya ingin memeriksa dump memori yang saya ambil dari situs ASP.NET 4 yang di-host di IIS 7 pada Windows Server 2008 (x86) dan diunduh ke mesin lokal saya.

Saya menginstal alat debugging dan meluncurkan WinDbg untuk pertama kalinya, membuka crash dump. Saya pergi ke File | Simbol File Path dan atur path ke *srv*c:\symbols*http://msdl.microsoft.com/download/symbols*dan menunggu semua simbol untuk memuat.

Ketika mencoba memuat SOS, saya mengalami masalah. Pertama, saya mencoba perintah berikut ...

.loadby sos mscorwks

... dan menerima tanggapan Unable to find module 'mscorwks'.

Setelah menjelajahi web, saya mencoba memuat mscorwks dengan menjalankan perintah berikut ...

sxe ld mscorwks.dll
g

... dan menerima respons "Tidak ada kesalahan debug yang dapat dijalankan di 'g'"

Saya menyalin SOS.dll (dari C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319) ke direktori WinDbg, kemudian mencoba ...

.load sos

... dan menerima kesalahan ...

The call to LoadLibrary(sos) failed, Win32 error 0n193
    "%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.

Saya tidak yakin bagaimana melanjutkan. Saya hanya ingin memuat SOS dan menggali file dump ini. Bantuan apa pun akan sangat dihargai.

Fyi ... Saya mencoba membuka file dump di Windows 7 versi 64-bit dengan Windbg versi 64-bit.

Jawaban:


203

CLR runtime dll diubah namanya menjadi clr.dlldengan .NET 4. Jadi untuk memuat versi SOS yang benar, Anda perlu menyesuaikan .loadbyperintah Anda . Yaitu

.loadby sos clr

Juga, jika Anda menggunakan 64 bit, Anda harus menginstal Debugging Tools versi 32 bit untuk Windows juga untuk men-debug aplikasi 32 bit. Mereka menginstal berdampingan, sehingga tidak ada masalah dalam memiliki versi 32 bit dan 64 bit pada mesin yang sama.

Saya akan menyarankan agar Anda tidak menyalin SOS.dll. SOS perlu mencocokkan versi kerangka yang tepat, jadi selama Anda memuatnya dari direktori framework yang digunakan .loadby, Anda sudah siap.


Saya merasa kesulitan untuk mendapatkan keduanya di sistem saya, karena installer terbaru mendeteksi secara otomatis tipe CPU. Apakah ada flag override yang Anda ketahui untuk MSI? Saya akan menginstal versi 32-bit WinDbg, tetapi tidak tahu apa yang diharapkan.
Dave

5
@Dave: Mungkin terlalu terlambat, tetapi per halaman instal yang ditemukan di sini: msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx Anda dapat memilih untuk menginstal Paket Redistributable yang menempatkan MSI untuk setiap versi arsitektur di sini : C: \ Program Files \ Microsoft SDKs Windows \ v7.1 \ Redist \ Debugging Tools untuk Windows
Aaron Lerch

Jika saya katakan .loadby sos clrsaya mengerti Unable to find module 'clr'. Saya mencoba untuk men-debug .NET 4 dengan x64 WinDbg
Csaba Toth

2
@CsabaToth apakah ini dump atau apakah Anda melakukan debugging langsung? Jika Anda melakukan debugging langsung, CLR mungkin belum dimuat. Anda dapat melakukannya sxe ld clruntuk berhenti ketika CLR telah dimuat dan kemudian Anda dapat memuat SOS pada saat itu.
Brian Rasmussen

@BrianRasmussen Ini adalah executable yang dikompilasi. Jika saya melihat pada jendela Modul, clr itu dimuat.
Csaba Toth

18

Perintah WinDbg 'g' berarti [Lanjutkan]

Karena Anda membuka file-dump tidak ada cara untuk 'melanjutkan', itu hanya berisi memori proses.

Jadi pesan "Tidak ada kesalahan debug yang dapat dijalankan di 'g'" adalah logis dalam kasus Anda karena prosesnya tidak berjalan .

Mengenai memuat versi SOS yang benar, gunakan perintah berikut tergantung pada versi .NET.

.NET 4 dan lebih tinggi .load oleh sos

.NET 3.5 dan 2 .load oleh sos mscorwks

.NET 1.0 dan 1.1 .load clr10 \ sos


1

Jawaban di atas perlu ditingkatkan, karena seiring waktu hal-hal menjadi lebih mudah untuk menangani pemuatan sos.

JOHN ROBBINS memiliki artikel bagus di sekitarnya, Lihat bahwa server simbol Microsoft dikonfigurasikan dalam lintasan file simbol dan jalankan! Analisis -v pada windbg prompt, ini akan melakukan trik itu akan mengunduh file sos yang relevan. Untuk memverifikasi jalankan .chain pada prompt dan Anda akan melihat dll dimuat.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.