検索

ホームページ  >  に質問  >  本文

C++の例外について?

  1. 通常のデバッグによって生成される例外 (図に示すように) と、ユーザー入力が正しいかどうかを人為的に判断しようとする try throw 例外の間に本質的な違いはありますか? C について話すときのメカニズムには前者が含まれますか? それとも単に後者のことを指しますか?

上記の最初の例外は何によって判断されますか?たとえば、図の accedd 違反は、コンパイラまたは IDE の他のツールによって判断されますか?

给我你的怀抱给我你的怀抱2735日前1163

全員に返信(3)返信します

  • phpcn_u1582

    phpcn_u15822017-06-30 09:59:21

    @Evian おっしゃることはもっともです、補足させてください

    • C++ の例外は、C++ によってスローされた例外のみをキャッチできます。簡単に言うと、それ自体によってスローされた例外のみをキャッチできます (作成したコードに限らず、ランタイム ライブラリも同様)。

    • 実際、C++ によってスローされる例外は、単に定義され、予測可能なものであるため、実際の例外ではありません。実際の例外は、実行後に CPU によってのみトリガーされます。つまり、ハードウェアによってスローされた例外です。

    • ハードウェアは C++ を直接考慮せず、その処理はオペレーティング システムに任せられます。オペレーティング システムが異なると、例外処理にも一貫性がありませんが、例外処理は上位レベルの言語に渡されません。

    • 比較的完全な Windows 例外処理を例に挙げると、次のようになります

    1. デバッガに任せる(プロセスをデバッグする必要がある)

    2. VEHを実行

    3. SEHを実行

    4. TopLevelEH (プロセスはデバッグ時に実行されません)

    5. デバッガに任せる(上記の例外処理では処理できないとのことでしたので、再度デバッガに渡しました)

    6. 呼び出し例外ポート通知 csrss.exe

    返事
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-30 09:59:21

    メモリ読み取り違反はハードウェアによって判断され、処理のためにオペレーティング システムに渡されます。 (C++ についてはあまり詳しくありませんが、これは C++ の例外のようなものではなく、Windows によってスローされる例外です。)

    返事
    0
  • 怪我咯

    怪我咯2017-06-30 09:59:21

    あなたの言いたいことは理解できませんでした。一部のライブラリには例外クラスが組み込まれていますが、結局のところ、それらはすべて std::exception から継承しています。また、これは実行時例外であり、コンパイラや IDE とは関係ありません。

    返事
    0
  • キャンセル返事