2012年7月22日日曜日

ランタイムエラーとは?




*この記事では、ランタイムエラーの解決のための文ではなく、ランタイムエラーが何なのかを解説しています。
プログラムの状況に応じて、ランタイムエラーは、さまざまな発生するため、一般的な解決方法がありません。

ランタイムエラーを修正したい場合は、デフォルトで
1。その番組制作会社や流通会社のサイトにアクセスしてFAQ、Q&Aを検索する
2。ネイバー、Googleなどのサイトで検索
3。解決しなかった場合は関連サイトのあちこちにお問い合わせ
このコースを行ないます。


- ランタイムエラー(Runtime Error)とは?


  どのようなプログラムを作成するときに、そのプログラムのソースコードを全部組んだ後は、通常、次のような過程を経る。 (ソースコードを動作に合わせて買ってして作っていく過程を "織り"や "コーディングする"という)

     ソースコードをコンパイルする
- >リソース(resource)とオブジェクト(object)ファイルリンク(link)との連携を編集
- >実行ファイルの作成
- >プログラムの実行
- >終了

  1)コンパイル時のエラー(Compile-time Error)

  この過程の中で、一番最初のプロセス(ソースコードのコンパイル)で発生するエラーは、コンパイル時にエラーとする。コンパイル時に発生したエラーを指す言葉だ。このエラーは、通常、ソースコード自体の文法上の間違い(syntax error)によって発生します。また、このエラーは、処理(handling)が不可能なのだ。プログラムとして実行さえされる前にエラーが発生し、当然ハンドリングでらっぱで一度コードを変更しなければならないのだ。したがって、このエラーは、開発過程で、事前に修正され、通常のユーザーがこのエラーを見ることはない。

  2)リンク時のエラー(Link-time Error)

  2番目のコース(連携編集)で発生するエラーは、リンク時にエラーとする。コンパイル時のエラーと同様に、プログラムの実行前に発生したエラーの一つである。実際にはこのエラーはあまり重要に考えていないし、このような用語は、よく​​使うこともない。このエラーは、主に必要なリソース(Resource、図、文字列のようにプログラムに入る付加的なデータを指します)やライブラリの欠如が原因で発生しますが、そうでない場合には、解決が難しい。コンパイルエラーと同様の理由で一般ユーザーが出会うことのない形の誤りである。

 3)実行時エラー(Run-time Error)

  そして第四の過程で発生するエラーを実行時エラーとする。ランタイムエラーの定義は、文字通り、 "プログラムの実行中に発生したエラー"である。他の意味はない。インターネット検索をしてみると、ランタイムエラーを説明する言葉が次のようなものがある。

  "プログラムの変更が可能な環境を越えた環境によって発生するエラー"、
  "どのようなオブジェクト(object)を実行しようと探していないか、あるいは適していない値を戻しながら原因となるエラー"
 
  この説明は完全に間違っているわけじゃないけど厳密に言えばすべて間違っている。なぜそうなのか調べよう。

  4)実行時エラーの発生原因

  ランタイムエラーの発生原因はいろいろありますが表面的な理由はただ一つである。
  プログラムが動作中に何らかの理由で不正なデータを持つようになって誤った取り扱いを進行しようとするとランタイムエラーが発生しているのだ。このとき、プログラム自体の調整したり、あるいはOSが割り込みプログラムを停止させる。プログラムが実行時エラーを自主的に調整した場合、ユーザーはプログラムを継続して利用することができるだろう。しかし、OSがプログラムを停止させた場合、もはや利用できず、使用していたデータも蒸発するようになる。
  プログラマは、明らかに開発の過程でランタイムエラーが発生する可能性を洞察して、エラーが発生しても誤った取り扱いをしないようにするコードを事前に入れてユーザーに色とりどりで派手で詳細アルリムチァングを浮かべて親切に指示しますが、プログラマも神ではなく関係にどうかすると、予期しないランタイムエラー(unexpected run-time error)が発生します。
  これにより、そのプログラムが処理していない、予期しないランタイムエラーはどうでしょうか?それは、 "下水終末処理場"を考えれば、どうなるか分かりやすい。ハンドリングされていないランタイムエラーは、OS(あるいはVM)が最終的に解決する。 OSは、実行時エラーを、最終的に処理して、ユーザーに対して、予期しないランタイムエラーが発生したこと知らせた後、プログラムを終了させて​​再び正常にコンピュータを操作する。これは、Windowsでよく目にする、次のような場面の発生過程である。

 


  前に説明したように、ランタイムエラーの表面的な理由はただ一つと言った。それなら根本的な原因は何か?答えは、 "あまりにも多様である"である。その中をいくつか選んで表示すると次の通りである。

  1。論理的に不正な動作の組み合わせ
  2。 OSが判断することにどのようなプログラムが下した命令は、コンピュータの動作に悪影響を及ぼすと考えられる場合
  3。プラットフォーム(platform)の違いの問題

  "論理的に不正な動作の組み合わせ"というのは、簡単に言うとバグ(bug)です。プログラマは、プログラムを常にプログラムが正常であり、常識的な方向に動作するように設計が既に言ったように、プログラマは神ではないので、プログラムは明らかに奇妙な動作をすることができる。楽しみにして予測して設計された方向にプログラムが動作していないのだ。そんなとき、私たちはこれをバグと呼ぶ。この点ではすべてのプログラムは、バグが発生する可能性があることもできる。そのため、いずれも同じように、プログラムもフィードバック(feedback)が重要である。
  もちろん、バグが発生したすべてのランタイムエラーに直行するわけではない。バグにも無欠に動作する(ただし、任意の方向ではない)バグと、ランタイムエラーを発生させるバグがある。そのバグは、処理が頭が痛い。

  プラットフォームの違いの問題が原因で、ランタイムエラーは、プログラムの設計の問題でもある。端的な例えば寝ると、Windows XP上で開発されたプログラムがDOSでよく帰って行くかである。もちろんそんなことも、そうでない場合があります。
  最近開発された通常のプログラムは、先輩プログラマによって既に開発された便利なライブラリとツールを利用することで、開発生産性を向上させ、時間を短縮シキゴンが、むしろそのためのプラットフォームに制約を受けることになる。そのライブラリが特定のプラットフォームに最適化されている場合が多いからだ。だから、先に挙げた例のように、プラットフォームが変われば、プログラムが動作している状況も変わる。プログラム設計時にそれを予測していなければ、結果のプログラムは、誤動作して、実行時エラーが発生しているのだ。ところが、実際にこれは予測して設計しても、これらの誤動作を完全に撲滅することはできません。すべてのユーザーのコンピュータが同じOSとして装着したハードウェアや敷かれたプログラムは、一様に同じものではないので、いくらでも発生することができる。プログラマは、これらの問題を解決するために、プラットフォームとアプリケーション間の格差を減らすことができる方法を考案するようになるが、それがVMである。このVMを介して実行されるプログラムは、任意のプラットフォームからでも同じように動作することが保証される。おかげでこのようにプラットフォームの違いによる実行時エラーは、ますます解消されている。

  あ、ちょっと話がセトヌンデ...;
  次に、最終的に2回の場合は、事実上の画面のようなすべてのエラーメッセージの原因でもある。バグによって、あるいはプラットフォームの違いに起因する誤動作が原因でプログラムが "身に余ること"(許可を超える動作)をすると、OSはプログラムを停止させ、強制的に終了させる。
  そのような "身に余ること"と言うようであれば、代表的に "メモリ侵犯"が挙げられる。 "メモリ侵犯"は、プログラムがOSが許諾したメモリの領域以外の領域にアクセスしようとするものである。これは、満員に組まれたオペレーティングシステムでは非常に危険な行為であり、OSはすぐにプログラムを停止した後、ユーザーに通知し、強制的に終了させる。 OSとの "独裁者"が構築した世界が見るには、法律違反のようだ。違法を犯せばどうなるか?当然法令に記載されたままの処罰を受けるだろう。

  5)実行時エラーの解決方法

  原因を知っているので、今の回避策を知っておくべきだろう。ランタイムエラーは、どのように解決できますか?結論から言えば、一般ユーザーは、ランタイムエラーがほとんど解決できない。どのようなプログラムで発生するランタイムエラーの "解決策"と知られているのは全面的にそのプログラムを作った人、あるいはそのプログラムやメカニズムをよく知っている一部の専門家が提示したのだ。一般ユーザーは、(もちろん、ここにも専門家ではあるだろうが...)ただ専門家が示すように、従うしかない。そのため、ランタイムエラーを修正するパッチ修正された新しいバージョンが出ることを待つべきである。しかし、その解決策やパッチは、すべてのコンピュータ、すべての状況で利用できることはなく、最終的にランタイムエラーは、すべての人、すべてのコンピュータから完全に撲滅されにくい。その理由は簡単だ。一般ユーザーは、プログラム内部では、特定の動作や操作がどのように帰るのか分からないからだ。もしそれを知っていれば、なぜエラーが発生していることも、すぐに追跡して出してエラーを解決することができるだろう。ランタイムエラーを解決する方法の核心は、プログラムがどのように間違って帰るのか調べるのだ。
  それでもそのメカニズムを知らない一般ユーザーが実行時エラーを、非常に解決することができないとは言えない。プログラマ(システムプログラマやOSプログレモドゥン)は、エラーが発生した場合、他のプログラマのため必ずエラーの原因と発生場所などの詳細情報をお知らせするように設計する。そんな時に発生するエラーメッセージの一部は、一般ユーザーでも簡単に聞き分けることができる。たとえば、 "ファイルが見つかりません"、 "ファイルが使用中にアクセスできません"、 "アクセス権がありません"などのように人間が見て知ることができるエラーメッセージもある。このような場合に気づいたが少しあります。コンピュータをいく​​つかに触れることを知るユーザーならすぐに解決することができる。もちろん、あれこれゴンドゥリダガ壊すこともある。


- 結論

  さあ、これでインターネットに飛び交うランタイムエラーの2つの説明が何悪いのかわかるだろうか?

  "プログラムの変更が可能な環境を越えた環境によって発生するエラー"
  ==>実行時エラーというのは、プログラムの調整可能かどうかとは無関係です。

  "どのようなオブジェクト(object)を実行しようと探していないか、あるいは適していない値を戻しながら原因となるエラー"
  ==>この説明も本当に曖昧である。適していない値を戻したとみなランタイムエラーが発生することはありません。(もちろんOOPではそんなことができる)。



  結論:ランタイムエラーは、 "プログラムの実行中に発生したエラーの総称"であるだけで、それ以上それ以下でもない。


*エラーハンドリング(error handling):プログラムの実行中に発生したエラーを処理することをいう。
*プラットフォーム(platform):OSやプログラムが動作しているコンピュータ環境を総称する。
* VM(Virtual Machine):仮想マシン。プログラミングで言うVMは、コンパイルされたプログラムのコードを翻訳して実行するコンパイラを指す言葉だ。ハードウェアとプログラムの間を中継して、二国間の違いを減らす役割をする。
* OS(Operating System):オペレーティングシステム

0 件のコメント:

コメントを投稿