つまり、システムがエラーをスローする前に、エラーをスローする必要があると言っているのです....差し迫ったエラーについて警告しますか?
ポイントは何でしょうか?セグメンテーション違反が発生すると、セグメンテーション違反が発生したことを意味します。最初に「セグメンテーション違反が発生します」という別のメッセージは必要ありません。
ここでポイントを完全に見逃していますか?:p
編集:編集
の意味はわかりますが、実装するのは簡単ではありません。問題は、不正なポインタにアクセスした場合にどうなるかを決定するのは、コンパイラ、言語、またはランタイムではないことです。言語は、これについて公式に約束も保証もしません。代わりに、OS は、これがデバッグ実行可能ファイルであることを知らずに、どの行番号が問題を引き起こしたかなどを知らずに、エラーを発生させます。このエラーが示す唯一のことは、「アドレス X にアクセスしようとしましたが、許可できません。死ぬ」ということです。コンパイラはこれで何をすべきですか?
では、この役立つエラー メッセージを生成するのは誰でしょうか? そしてどうやって?確かに、コンパイラはそれを行うことができますが、エラー処理ですべてのポインターアクセスをラップして、セグメンテーション違反/アクセス違反が発生した場合にそれをキャッチし、代わりにアサートをトリガーします. 問題は、これがとてつもなく遅いことです。「リリースが遅すぎる」だけでなく、「使用するには遅すぎる」。また、呼び出し先のすべてのコードにコンパイラがアクセスできることも前提としています。サードパーティのライブラリで関数を呼び出すとどうなりますか? コンパイラはそのライブラリのコードを生成しないため、エラー処理コードでラップできない内部へのポインター アクセス。
OSは、関連するシンボルファイルをロードする意思がある/できると仮定して、デバッグ実行可能ファイルを実行しているかどうかを何らかの形で検出するなど、それを実行できます...行番号を出力できるようにするためです。オーバーエンジニアリングについて話します。これはほとんど OS の仕事ではありません。
そして最後に、これを行うことで何を得ることができますか? 単にデバッガを起動してみませんか? このようなことが発生すると、自動的に中断され、正確な行番号とその他すべてが提供されます。
それは可能ですが、非常に複雑で、コンパイラと OS の両方が関与するため、メリットは非常に小さくなります。デバッガーが既に通知できる情報を通知するポップアップ ボックスが表示されます。そして、その情報を使用して、とにかくデバッガーを起動して、何が問題なのかを調べます。