BSOD - arti dari bugcheck?

4

Saat masuk ke Windows 7 hari ini, PC saya langsung BSOD. Menggunakan WhoCrashed saya mendapatkan laporan berikut:

-

  • Pada Sel 12.02.2013 13:56:20 GMT komputer Anda mogok
  • File dump dump: C: \ Windows \ Minidump \ 021213-27390-01.dmp
  • uptime: 00:00:25
  • Ini mungkin disebabkan oleh modul berikut: ntoskrnl.exe (nt + 0x1AA698)
  • Kode bugcheck : 0x1000007E (0xFFFFFFFFC0000096, 0xFFFFF80003610698, 0xFFFFF8800614C7B8, 0xFFFFF8800614C010)
  • Galat: SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M
  • path file: C: \ Windows \ system32 \ ntoskrnl.exe
  • produk: Sistem Operasi Microsoft® Windows®
  • perusahaan: Microsoft Corporation
  • deskripsi: Kernel & Sistem NT
  • Deskripsi pemeriksaan bug: Ini menunjukkan bahwa utas sistem menghasilkan pengecualian yang tidak ditangkap oleh penangan kesalahan.

Ini tampaknya merupakan bug driver perangkat lunak tipikal dan tidak mungkin disebabkan oleh masalah perangkat keras. Kecelakaan terjadi di kernel Windows. Mungkin masalah ini disebabkan oleh pengemudi lain yang tidak dapat diidentifikasi saat ini.

-

Sekarang, PC saya sering macet / membeku dan pada tugas-tugas berat tertentu di masa lalu, tetapi penyebabnya (saya pikir) adalah slot RAM yang cacat pada motherboard saya. Mengosongkan slot itu menghentikan tabrakan.

Hari ini, crash lagi, dan saya belum mengubah apa pun yang berhubungan dengan perangkat keras.

Saya tahu saya bisa berkeliling Google membaca apa artinya kode bugcheck ini, tetapi belakangan saya menyadari bahwa pengalaman pribadi seseorang (dengan bugcheck / masalah yang sama) jauh lebih berguna, khususnya karena orang ini mungkin datang ke larutan.

Terima kasih banyak!

cr0z3r
sumber
1
Pertama ... Perbarui semua driver perangkat Anda. Gunakan safe mode untuk menyesuaikan driver apa yang dimuat saat Windows dimuat
Ramhound
Terima kasih! Sehubungan dengan jawaban saya kepada Ian Boyd, apakah Anda mengetahui perangkat lunak pembaruan perangkat yang bagus? Atau apakah metode manual yang biasa masih yang terbaik untuk memperbarui driver Anda?
cr0z3r
1
Perangkat lunak apa pun yang dirancang untuk memperbarui driver Anda (kecuali Pembaruan Windows) adalah penipuan besar. Lakukan dengan cara yang benar sendiri
Ramhound

Jawaban:

10

Dalam kasus ini, utas menemui pengecualian

C0000096: STATUS_PRIVILEGED_INSTRUCTION
          Executing an instruction not allowed in current machine mode.

Kesalahan ini dimunculkan oleh CPU itu sendiri. Beberapa kode mencoba menjalankan instruksi yang tidak boleh dilakukan. Kemungkinan ini disebabkan oleh korupsi memori; di mana kode kernel mencoba mengeksekusi data sampah.

Kesalahan semacam ini benar-benar tidak mungkin untuk ditentukan. Ada kesalahan dalam kode "kernel" yang seharusnya tidak terjadi. Sangat tidak mungkin ada bug perangkat lunak dalam kode Microsoft apa pun; yaitu ketika Anda mulai mencari di tempat lain.

  • Pengemudi Pihak Ketiga . Drive mode kernel memiliki akses penuh ke perangkat keras fisik. Bug yang tersesat di driver pihak ke-3 (mis. Video, suara, jaringan, USB 3.0, SATA) dan dapat merusak kode atau data apa pun yang ada di sistem. Langkah berikutnya : coba hapus perangkat keras yang baru ditambahkan (sehingga beberapa driver pihak ketiga tidak dimuat), coba boot dalam safe mode (sehingga beberapa driver pihak ketiga tidak dimuat), atau instal ulang Windows (sehingga beberapa driver pihak ketiga tidak dimuat)
  • RAM buruk . Jika sedikit dibalik, dan itu mengubah instruksi yang sangat jinak menjadi instruksi yang berbeda, tidak valid, Anda bisa mendapatkan kesalahan ini. Langkah selanjutnya : Keluarkan RAM stick, pindahkan RAM ke slot lain, lepas RAM, ganti catu daya
  • Overclocking . Terkadang hal-hal yang sangat aneh dapat terjadi ketika Anda melakukan overclock. Semoga semua orang mengirimkan Microsoft dump crash mereka; karena Microsoft memang menyelidiki mereka. Kesalahan umum yang akan mereka dapatkan adalah ketika CPU mengeksekusi instruksi:

    xor eax, eax;
    

    Ini adalah operasi yang sangat sederhana yang dapat dijalankan CPU; itu hanya mengatur register CPU internal EAXke nol. Tidak mungkin itu bisa gagal; kecuali saat Anda melakukan overclock - atau masalah fisik lainnya.

tl; dr: Jika Anda telah menghapus perangkat lunak, maka itu perangkat kerasnya.

Pembaruan : Metodologi Pemecahan Masalah

Saya ingin menyebutkan detail yang saya lalui, hampir tanpa berpikir ketika melihat kesalahan ini.

Yang pertama adalah kode bugcheck yang sebenarnya:

0x1000007E - SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M

Binging yang di Google memberikan halaman dokumentasi Microsoft

Pemeriksaan Bug 0x1000007E: SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M

Ini menunjukkan bahwa utas sistem menghasilkan pengecualian yang tidak ditangkap oleh penangan kesalahan.

saya tahu, dari pengalaman menjadi pengembang, bahwa jika aplikasi saya (atau salah satu utasnya) mengalami "pengecualian" , dan saya tidak "menangani " pengecualian, Windows akhirnya akan menanganinya dengan mematikan aplikasi. Jika pengecualian tidak tertangani terjadi saat dalam mode kernel, OS tidak punya pilihan selain menanganinya dengan mematikan kernel. Apa yang saya tertarik adalah yang pengecualian sedang dilempar. saya berasumsi (salah, ternyata) itu adalah "Pelanggaran Akses" .

saya tahu bahwa semua bugcheck disertai dengan empat parameter yang menggambarkan apa yang sebenarnya terjadi:

  • Parameter 1: 0xFFFFFFFFC0000096
  • Parameter 2: 0xFFFFF80003610698
  • Parameter 3: 0xFFFFF8800614C7B8
  • Parameter 4: 0xFFFFF8800614C010

Tapi apa artinya ini ?! Saat itulah kita kembali ke halaman dokumentasi, yang tidak menggambarkannya. Tapi itu tidak mengatakan:

Pemeriksaan bug 0x1000007E memiliki arti dan parameter yang sama dengan pemeriksaan bug 0x7E (SYSTEM_THREAD_EXCEPTION_NOT_HANDLED).

Luar biasa. Dan halaman lain ini mendokumentasikan parameter:

SYSTEM_THREAD_EXCEPTION_NOT_HANDLED Parameter

Parameter berikut ini muncul di layar biru.

  • Parameter 1: Kode pengecualian yang tidak ditangani
  • Parameter 2: Alamat tempat pengecualian terjadi
  • Parameter 3: Alamat catatan pengecualian
  • Parameter 4: Alamat catatan konteks

Ini yang saya inginkan, kode pengecualian yang tidak ditangani . Dalam kasus Anda itu adalah kode pengecualian:

0xFFFFFFFFC0000096

saya tahu, dari pengalaman, bahwa Anda menjalankan Windows 64-bit, karena kode itu panjangnya 64-bit. Sungguh saya hanya ingin 32-bit yang lebih rendah:

0xC0000096

Biasanya saya akan berharap untuk menemukan kode kesalahan di winerror.hdalam direktori pengembangan saya; tapi itu tidak ada di sana. Butuh beberapa Binging, tetapi saya menemukan bahwa mencari:

winerror C0000096

arahkan saya ke sebuah halaman di winehq , yang menyatakan konstanta:

STATUS_PRIVILEGED_INSTRUCTION = 0xC0000096

Binging untuk konstanta itu menuntun saya halaman dokumentasi Microsoft kanonik :

Pengecualian Perangkat Keras

STATUS_PRIVILEGED_INSTRUCTION: Menjalankan instruksi yang tidak diizinkan dalam mode mesin saat ini.

Saya juga tahu bahwa pengecualian ini dilemparkan oleh CPU itu sendiri . Saya tahu itu karena "Privileged Instruction" berarti Anda mencoba menjalankan instruksi CPU yang tidak diizinkan. saya juga dapat mengetahui hal ini karena halaman tersebut disebut Pengecualian Perangkat Keras .

Jadi kita pada intinya adalah beberapa kode berjalan yang mencoba menjalankan instruksi CPU yang tidak seharusnya. Ada dua kemungkinan:

  • memori rusak; perangkat lunak tidak ditulis untuk mencoba mengeksekusi kode itu, tetapi itulah yang akhirnya berakhir dengan RAM
  • itu benar-benar perangkat lunak kereta, dan ia mencoba melakukan sesuatu yang tidak diizinkan.

Karena kode Microsoft terus diuji di jutaan mesin setiap hari, kemungkinan besar:

  • menjadi masalah dengan perangkat keras Anda
  • bug dalam kode orang lain yang menyebabkan masalah

Bagaimanapun, begitulah cara saya mengerjakan bugcheck itu. Mungkin dengan mengetahui bagaimana saya melewatinya, ini dapat membantu Anda saat berikutnya Anda memiliki bugcheck.

Ian Boyd
sumber
Terima kasih! Apakah Anda merekomendasikan alat khusus yang memungkinkan saya untuk memeriksa / memperbarui driver saya ke versi terbaru mereka, atau haruskah saya melakukannya secara manual?
cr0z3r
1
@ cr0z3r Saya belum pernah menemukan pemeriksa driver generik tunggal (saya berbicara tentang yang memeriksa semua driver di komputer Anda, bukan yang memeriksa untuk melihat apakah driver tertentu up to date) yang bukan scam / penuh adware. Saya akan pergi ke situs web masing-masing pembuatan sendiri.
Scott Chamberlain
@ScottChamberlain Justru maksud saya .. mereka selalu menawarkan versi uji coba yang berisi daftar satu miliar driver yang ketinggalan zaman, tetapi hanya setelah membeli versi pro-super eksklusif mereka, Anda (seharusnya) dapat memperbaruinya secara otomatis. Bagaimanapun, pekerjaan manual itu. Terima kasih!
cr0z3r
1
Tidak aman untuk menganggap itu. Microsoft hanya memiliki driver yang produsen ajukan ke WHQL untuk pengujian WHQL. Dalam kasus saya, itu berarti driver chipset jaringan yang berusia sepuluh tahun, daripada yang dibuat tahun lalu. Realtek tidak pernah repot untuk mengirimkannya ke Microsoft; jadi Pembaruan Windows tidak akan memilikinya. Itu sebabnya Anda harus pergi ke pabrik - kadang-kadang. Chipset USB3.0 motherboard saya tidak memiliki driver pada Pembaruan Windows; Saya harus pergi ke situs web mereka. nVidia tidak selalu memperbarui driver WHQL. Terkadang bahkan driver chipset motherboard.
Ian Boyd
1
Di sisi lain, Anda tidak ingin memperbarui driver mau tak mau. Terkadang yang terbaru dan terhebat memiliki bug yang belum ditemukan. saya lebih suka mempercayai driver bersertifikasi WHQL (dari Pembaruan Windows). Tetapi jika Anda memiliki masalah dengan sesuatu, Anda tidak punya pilihan selain memperbarui driver.
Ian Boyd