Bagikan melalui


0x3B Pemeriksaan Bug: SYSTEM_SERVICE_EXCEPTION

Pemeriksaan bug SYSTEM_SERVICE_EXCEPTION memiliki nilai 0x0000003B. Ini menunjukkan bahwa pengecualian terjadi saat menjalankan rutinitas yang beralih dari kode non-istimewa ke kode istimewa.

Penting

Artikel ini untuk programmer. Jika Anda adalah pelanggan yang telah menerima kode kesalahan layar biru saat menggunakan komputer Anda, lihat Memecahkan masalah kesalahan layar biru.

parameter SYSTEM_SERVICE_EXCEPTION

Parameter Deskripsi
1 Pengecualian yang menyebabkan pemeriksaan bug.
2 Alamat instruksi yang menyebabkan pemeriksaan bug
3 Alamat rekaman konteks untuk pengecualian yang menyebabkan pemeriksaan bug
4 0 (Tidak digunakan)

Penyebab

Kode berhenti ini menunjukkan bahwa kode yang dijalankan memiliki pengecualian, dan utas yang ada di bawahnya, adalah utas sistem.

Ini dapat terjadi karena dereferensi pointer NULL atau alamat acak yang salah diakses. Ini pada gilirannya dapat disebabkan oleh memori yang dikosongkan sebelum waktunya, atau kerusakan struktur data.

Informasi pengecualian yang dikembalikan dalam parameter 1 dijelaskan dalam nilai NTSTATUS. Kode pengecualian didefinisikan dalam ntstatus.h, file header yang disediakan oleh Windows Driver Kit. (Untuk informasi selengkapnya, lihat File header di Windows Driver Kit).

Kode pengecualian umum meliputi:

  • 0x80000003: STATUS_BREAKPOINT

    Titik henti atau ASSERT ditemui ketika tidak ada debugger kernel yang melekat pada sistem.

  • 0xC0000005: STATUS_ACCESS_VIOLATION

    Terjadi pelanggaran akses memori.

Resolusi

Untuk menentukan penyebab spesifik dan untuk membuat perbaikan kode, pengalaman pemrograman dan akses ke kode sumber modul yang rusak diperlukan.

Untuk men-debug masalah ini, gunakan perintah .cxr (rekaman konteks tampilan) dengan Parameter 3, lalu gunakan kb (lacak balik tumpukan tampilan). Anda juga dapat mengatur titik henti dalam kode yang mendahului kode berhenti ini dan mencoba untuk maju satu langkah ke dalam kode yang salah. Gunakan perintah u, ub, uu (unassemble) untuk melihat kode program assembly.

Ekstensi debugger !analyze menampilkan informasi tentang pemeriksaan bug dan dapat membantu dalam menentukan akar penyebabnya. Contoh berikut adalah output dari !analyze.

SYSTEM_SERVICE_EXCEPTION (3b)
An exception happened while executing a system service routine.
Arguments:
Arg1: 00000000c0000005, Exception code that caused the bugcheck
Arg2: fffff802328375b0, Address of the instruction which caused the bugcheck
Arg3: ffff9c0a746c2330, Address of the context record for the exception that caused the bugcheck
Arg4: 0000000000000000, zero.
...

Untuk informasi selengkapnya tentang WinDbg dan !analyze, lihat topik berikut:

Untuk informasi selengkapnya tentang penggunaan memori Windows, lihat Windows Internal Edisi Ke-7 Bagian 1 oleh Pavel Yosifovich, Mark E. Russinovich, David A. Solomon dan Alex Ionescu.

Identifikasi driver

Jika driver yang bertanggung jawab atas kesalahan dapat diidentifikasi, namanya dicetak di layar biru dan disimpan dalam memori di lokasi (PUNICODE_STRING) KiBugCheckDriver. Anda dapat menggunakan dx (ekspresi model objek debugger tampilan), perintah debugger, untuk menampilkan ini: dx KiBugCheckDriver.

kd> dx KiBugCheckDriver
KiBugCheckDriver                 : 0xffffe10b9991e3e8 : "nvlddmkm.sys" [Type: _UNICODE_STRING *]

Gunakan ekstensi !error untuk menampilkan informasi tentang kode pengecualian dalam parameter 1. Berikut ini adalah contoh output dari !error.

2: kd> !error 00000000c0000005
Error code: (NTSTATUS) 0xc0000005 (3221225477) - The instruction at 0x%p referenced memory at 0x%p. The memory could not be %s.

Lihat output STACK TEXT dari WinDbg untuk petunjuk tentang apa yang berjalan ketika kegagalan terjadi. Jika beberapa file cadangan tersedia, bandingkan informasinya untuk mencari kode umum yang ada di tumpukan. Gunakan perintah debugger seperti kb (display stack backtrace) untuk menyelidiki kode yang rusak.

Gunakan perintah berikut untuk mencantumkan modul yang dimuat dalam memori: lm t n

Gunakan !memusage untuk memeriksa status umum memori sistem. Anda juga dapat menggunakan perintah !pte dan !pool untuk memeriksa area memori tertentu.

Di masa lalu, kesalahan ini telah ditautkan ke penggunaan berlebihan dari kumpulan halaman, yang dapat terjadi karena driver grafis mode pengguna menyeberang dan meneruskan data buruk ke kode kernel. Jika Anda menduga ini masalahnya, gunakan opsi kumpulan di Driver Verifier untuk mengumpulkan informasi tambahan.

Pemverifikasi Driver

Driver Verifier adalah alat yang berjalan secara real time untuk memeriksa perilaku driver. Misalnya, Driver Verifier memeriksa penggunaan sumber daya memori, seperti kumpulan memori. Jika mengidentifikasi kesalahan dalam eksekusi kode driver, secara proaktif membuat pengecualian untuk memungkinkan bagian kode driver tersebut diteliti lebih lanjut. Driver Verifier Manager disertakan dalam Windows dan tersedia di semua PC Windows.

Untuk memulai Driver Verifier Manager, masukkan pemverifikasi di prompt perintah. Anda dapat mengonfigurasi driver mana yang akan diverifikasi. Kode yang memverifikasi driver menambahkan overhead saat berjalan, jadi cobalah untuk memverifikasi jumlah driver terkecil yang mungkin. Untuk informasi selengkapnya, lihat Pemverifikasi Driver.

Keterangan

Untuk pemecahan masalah umum kode pemeriksaan bug Windows, ikuti saran berikut:

  • Jika driver atau layanan sistem baru perangkat telah ditambahkan baru-baru ini, coba hapus atau perbarui. Cobalah untuk menentukan apa yang berubah dalam sistem yang menyebabkan kode pemeriksaan bug baru muncul.

  • Lihat di Manajer Perangkat untuk melihat apakah ada perangkat yang ditandai dengan tanda seru (!), yang menunjukkan masalah. Tinjau log peristiwa yang ditampilkan di properti untuk driver perangkat yang rusak. Coba untuk memperbarui driver terkait.

  • Periksa Pemantau Peristiwa Masuk Sistem untuk pesan kesalahan tambahan yang mungkin membantu menentukan perangkat atau driver yang menyebabkan kesalahan. Cari kesalahan kritis dalam log sistem yang terjadi di kurun waktu yang sama dengan layar biru.

  • Jika Anda baru saja menambahkan perangkat keras ke sistem, coba hapus atau menggantinya. Atau periksa dengan produsen untuk melihat apakah ada patch yang tersedia.

Untuk informasi pemecahan masalah umum tambahan, lihat Data layar biru.

Lihat juga

Analisis crash dump menggunakan debugger Windows (WinDbg)

Menganalisis File Cadangan Kernel-Mode dengan WinDbg

Referensi Bug Check Code