問題タブ [seh]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
920 参照

c++ - 構造化例外処理 (SEH) を使用することの結果?

Doug Harrison が、構造化された例外を使用する (つまり、キャッチする) ことの何が「間違っている」かについて良い意見を述べているのを見ました (質問 #3を参照)。しかし、他にどのような結果がありますか?たとえば、/eha でコンパイルされた複数のプロジェクトが、/ehs でコンパイルされた他のプロジェクトと混在している場合はどうなりますか? ライブラリが相互にリンクされているとき (コンパイル時または実行時) に問題はありますか?

しかし、それはほんの一例です。他にどのような問題が考えられますか?

0 投票する
2 に答える
1949 参照

c++ - WindowsでC++例外として無効なfgetpos呼び出しをキャッチするにはどうすればよいですか?

Visual C ++ 2008では、次のように生成された例外を「キャッチ」したいと思います。

キャッチを成功させるために私が行った調整は次のとおりです。

  1. SEHがアクティブになります(/ eha)
  2. キャッチを追加しました(...)
  3. _set_se_translatorベクトルを追加しました。
  4. SEH構文に追加/調整しました:__ try / __except(EXCEPTION_EXECUTE_HANDLER)

要するに、私は「本の中のすべて」を試しましたが、それでも例外を捕まえることができません。の呼び出しをに置き換える::fgetposint hey = foo / 0、突然、上記のすべての手法が期待どおりに機能します。ですから、私が扱っている例外は、::fgetposどういうわけか「特別な」ものです。

誰かがこの::fgetposエラーがキャッチできないように見える理由と、それを回避する方法を説明できますか?

update VS IDEで実行すると、出力ウィンドウに例外の名前が付けられません。それが言うのはこれだけです:

Microsoft VisualStudioCランタイムライブラリがMyProgram.exeで致命的なエラーを検出しました。

あまり役に立ちません。コマンドラインからコンソールアプリを実行すると、クラッシュダイアログが表示されます。ダイアログの「問題の詳細」セクションには、次の情報が含まれています。

問題イベント名:BEX
例外オフセット:0002fd30
例外コード:c0000417
例外データ:00000000
追加情報1:69ad
追加情報2:69addfb19767b2221c8e3e7a5cd2f4ae
追加情報3:b1ff
追加情報4:b1ffca30cadddc78c19f19b6d150997f

0 投票する
2 に答える
1239 参照

c++ - SEHエラーレポート

Visual Studio 2008 C ++プログラムがあり、プログラムは__try/__exceptブロックでラップされてSEH例外をキャプチャします。例外フィルターはエラーログを作成し、ユーザーに欠陥レポートの送信方法に関する詳細な指示を提供します。

__tryフィルタ内のコードを別の/__exceptブロックでラップする必要がありますか?そうでない場合、それを除いてどうなりますか?もしそうなら、それはどのように扱われるべきですか?

ありがとう、PaulH


編集:例外が発生した 場合MyFilter、私は無限の例外ループに入ります。だから、それは必要__try/__except処理をしているように見えます。私はこれを行うことを検討しています:

この場合、プログラムは異常終了し、OSに例外を渡して処理する必要があります。あれは正しいですか?

0 投票する
1 に答える
4826 参照

c++ - OllyDbgはVisualStudioexeをデバッグできません

この単純なコードを使用して、新しいvc++exeを作成しました。

アプリは非常にシンプルで、kernel32.dllとMSVCR100D.dllに応じたexeファイルが作成されます。

それをOllyDbgにインポートしてデバッグしようとすると(スタックウィンドウにSEHチェーンを表示したかっただけです)、「モジュール'testseh'にはコード外のエントリポイントがあります(PEヘッダーで指定されています)。おそらくこのファイルは自己解凍または自己変更。ブレークポイントを設定するときは、この点に注意してください。」コードは実行されず、ntdll.dllクラッシュ部分に直接ジャンプします(実際にはexeがクラッシュしていますが、printf命令をステップバイステップで実行することはできません)

どうしてこの振る舞いなの?exeファイルはCLIにもCLRにも依存していませんが、何かが足りませんか?

0 投票する
4 に答える
2115 参照

windows - 別のスレッドのスレッド情報ブロックを見つける

プロセスで実行されている別のスレッドのスレッド情報ブロック (TIB) を見つける方法はありますか?

別のスレッドの例外ハンドラを構築する必要がありますが、スレッド自体では実行できません。したがって、TIB を見つけて、別のスレッド内から構築する必要があります。どうすればこれを達成できますか?

0 投票する
2 に答える
1809 参照

c - オペコード 0xCC を例外としてキャッチ

C プログラムがオペコードの例外をトリガーする可能性がある0xCC
とします。どうすればそれをキャッチできますか?

私は試した:

これは私にとってはうまくいきません。私は何を間違っていますか?ありがとう!

0 投票する
2 に答える
1783 参照

c++ - Visual Studio 2010で例外処理モデルを混在させるとどうなりますか?

No(フラグが指定されていない)にEnable C++ Exceptions設定されたサードパーティの静的ライブラリが構築されています。C ++例外を有効にしてビルドされたコードから呼び出すとどうなりますか()?ライブラリ内から構造化例外がスローされた場合、メインアプリケーションによって_set_se_translatorに提供された関数は確実に呼び出されますか?(私の実験ではそうなることが示されていますが、これが定義された動作であるかどうか疑問に思っています)。/EH/EHa

/EH例外処理モデルを混合する際に他に考慮すべき点はありますか?

0 投票する
3 に答える
2894 参照

c++ - C++ 例外処理と SEH の混合 (Windows)

システムによって割り当てられたターゲットメモリgetaddrinfo()を取得するために呼び出す関数があります。多くの人が知っているように、getaddrinfo() によって割り当てられたメモリを解放するsockaddr*には、 を呼び出す必要があります。freeaddrinfo()

さて、私の関数には、いくつかの関数が失敗したために例外をスローする可能性のある場所がいくつかあります。私の最初の解決策は、freeaddrinfo()すべての if ブロックに を組み込むことでした。しかし、関数が戻る前にとにかくそれを呼び出さなければならなかったので、それは私には見苦しく見えました。

しかし、私が遭遇した問題は、スローステートメントを __try ブロックにコーディングすることが許可されていないことです。

次に、msdn を読み、throw ステートメントを __try ブロック内から呼び出されるヘルパー関数にスワップしようとしました...そしてほら、コンパイラはもうそれをうめきませんでした...

何故ですか?そして、これは安全ですか?これは私には意味がありません:/

コード:

編集:

以下を試してみましたが、整数をスローしても機能しますが、クラスを例外として使用すると機能しません:

なんで?:/

0 投票する
3 に答える
1057 参照

c++ - C / C++SEHビルドエラーの例

私はc/c++に完全に精通していません。分析を行うには、小さなプログラムをコンパイルする必要があります。

これはプログラムです

Dev C++4.9.9.2でコンパイルしています。これらは私が得るエラーです

このコードの何がそんなに悪いのか考えてみませんか?

0 投票する
3 に答える
1660 参照

delphi - 構造化例外ハンドラと Delphi

私はSEH使用せずに設定しようとしていますtry except
(これは、SEH がどのように機能するかをよりよく理解するための私自身の個人的な知識のためです)

次のコードは機能しません

しかし、これは

私は何を間違っていますか?最初のコードと 2 番目のコードの違いは何ですか?