Windows「例外エラー」と対処方法の一例
例外エラーって(;д;)ノ~''。・゚゚
Windows 起動時とか、アプリケーション起動時や作業中に、「例外エラー」が発生する場合があるやん。 ( * または、X には、任意の数字またはアルファベットが入ってる。)
「例外 0E が *** *******(XX)+00000XXX の 00XX:XXXXXXXXXXで発生しました。」
「0E」はプロセッサが検出したコードの一つ。コードには 00 から 11 まであるん。
「*** *******」はエラーが発生したプログラムやファイルを表す場合があるで。
「00XX:XXXXXXXXXX」とか、「アドレス:00XX:XXXXXXXXXX」は、エラーが発生したメモリ内部のアドレス(箇所)。
「例外エラー」は、プロセッサがエラーを感知したときにOSに通知するメッセージ。
1. 例外エラーの主な原因
アプリケーションのプログラムが動作不安定になってる場合
アプリケーションのプログラムが破損してる場合
アプリケーションのプログラム内部に問題がある場合
いわゆる「バグ」やな、プログラムが開発されたときに内部に発生してるプログラムの不具合。 ほとんどの不具合は、プログラムが製品となる前に改善(削除)されてるもんやけどなぁ。
OS が動作不安定になってる場合
増設した周辺機器(プリンタやスキャナなど)に原因がある場合
メモリが原因やったりする場合
2. 例外エラーの意味
何かの例外エラーが出てOSに通知されると、例外エラー毎に用意された処理プログラムが実行されてエラーメッセージが表示されよる。
この例外エラーにはコード番号ってのがあってな、各コード番号で原因と行われる処理が違うんやわ。
「例外エラーのコード番号一覧」
コード 番号エラー名
00 Divide Fault (わりざんの違反)
01 Debgger Fault
02 NMI interrupt
03 Breakpoint Trap
04 Overflow Trap
05 Bounds Check Fault
06 Invalid Opcode Fault
07 Coprocessor not available Fault (計算処理違反)
08 Double Fault
09 Coprocessor Segment Overrun
0A Invalid Task State Segment Fault
0B Not Present Fault
0C Stack Fault
0D General Protection Fault
0E Page Fault
0F なし
10 Coprocesser Error
11 Alignment Check Fault
よく見られる例外エラーには、コード 0D とコード 0E があるで。 (※ 0 はゼロ)
例外 0D : General Protection Fault (一般保護違反)
この例外は、プログラムがメモリ内で破壊されてしもたことを表してる、通常は直ぐにアプリケーションを終了するで。
システムやアプリケーションの操作をすると、CPUではその操作に対応する命令を計算というかたちで処理しよる。 例えばアプリケーションとかから1を0で割るとかっていう命令が発行されるけど、CPUが命令を計算する事が出来へんかった場合に、システムに対して例外的な命令やでって事を番号で伝えるん。 これが例外エラーの正体。
不正な命令へのアクセスが発生した場合、無効なデータとかコードにアクセスした場合、演算の特権レベルが無効な場合とかの状況が発生すると、CPUはOS(Windows)に「例外」を返して、例外エラーとして処理されるん。 例外エラーのほとんどの場合は復旧不可能で、システムを再起動またはシャットダウンせなあかんけど、エラーの状況によっては・・・?
んでも、こんなエラーの性質から、ユーザーが根本的なエラーの原因を解析し対処するのは「非常に困難」やね。(特にうちら「初心者」はなぁ)
番号 概要 00除算違反に出くわすとプロセッサはこの例外を返す。ゼロによる除算が行われようとした場合、除算の結果がディスティネーション オペランドに適合しない場合に、除算違反が発生。(除算違反) 01プログラム内に残されたデバッグ用のブレークポイントやタスク切り替えトラップなどをCPUが検知した際に発生。(デバッガ違反) 02割り込み 2 はハードウェアのマスク不可能割り込み状態用に予約されてる。 割り込み 2 を介する例外のトラップはないで。(通常、この例外エラーが発生する事はほとんどないんやで) 03デバッグソフトがプログラム内に設定したブレークポイントを検出した場合に発生。 040F ビットが 1 に設定されている時に INTO 命令が実行されると、オーバーフロー トラップが発生。 05BOUND 命令は配列インデックスを上限、下限と比較しよる。 インデックスが範囲外の場合、この例外割り込みが発生。(境界チェック違反) 06CPUに対して無効な命令が発行された場合などに発生するエラー(無効オペコード違反) 07浮動小数点演算コプロセッサがない環境でシステムなどが浮動小数点計算を実行する命令を発行した場合に発生。 08例外処理中に別の例外エラーが発生した際に発生。 09浮動小数点型命令で行ったメモリ アクセスがセグメントの終了位置を超えてしまった場合に発生。 10(0A)タスク ステート セグメント (TSS) は多数のディスクリプタ情報を含んでいるため、様々な状況で例外 0A エラーが発生しよる。 11(0B)不在割り込みは、セグメンテーション 機構を使って仮想メモリを使用している場合に発生。(簡単に言うと、データが無い事を示すマークのついたメモリ領域にアプリケーションがアクセスした際などに発生。) 12(0C)命令がスタックセグメントの制限を越えるメモリを参照した場合に起こるエラー。 13(0D)ほかのプロセッサ例外のいずれにも当てはまらない状態は一般保護違反となるんよ。 この例外は、プログラムがメモリ内で破壊されてしまったことを表し、通常は直ちにアプリケーションが終了するで。 14(0E)ページング保護ルールが犯された場合に発生。 15(0F)プロセッサの将来のバージョン用に予約されてるらしい。 16(10)存在するはずの浮動小数点演算コプロセッサが見つからない、またはコプロセッサにアクセスできない場合発生。 17(11)i486以降のCPUにおいてメモリ領域の連続性のチェックを行った際に不都合が見つかるとこの例外エラーが発生。
[ 対処方法 ]
1. ENTERキーを押してデスクトップ画面に戻るか試してみ。
2. 画面に表示される例外エラーの番号を確認しといて、「Ctrl」+「Alt」+「Del」キーを同時に2回続けて押して、コンピュータを強制的に再起動。
[ 回避策 ]
発生状況により問題を回避する方法も違ぉてくるでなぁ。
新しいアプリケーションやデバイスドライバーのインストールしてからメッセージが表示されるようになった場合は、WindowsをSafeモードで起動してインストールしたものを一旦削除。 その後再起動を行い問題が解決するか確認してみて? 大丈夫(解決)なら「それ」が原因(w