1

例外をスローしてエラーから回復するアプリケーションを作成しています。

ただし、デバッグするときは、例外がスローされる前に、エラーの時点でデバッガーを停止したいと考えています。とにかく、GDBが何らかのコードで実行を中断するコードを追加することはありますか?

私は ARM と x86 の両方のアーキテクチャに興味があります。いくつかのクロスプラットフォームが役立つでしょう。

編集:ブレークポイント命令またはそれをラップするマクロを探しています。

4

2 に答える 2

7

コードに「ブレークポイント命令」を追加できます。私が知っているほとんどの OS は、デバッガーが接続されていない場合、ブレークポイントを無視します。

これに使用する命令はコンパイラとプロセッサに依存しますが、ほとんどのコンパイラには、DebugBreak();MS コンパイラや__builtin_trap();gcc などの「組み込み」関数または「組み込み」関数があります。

編集:__builtin_trap();コードがそれ以上実行されなくなるため、悪い考えです。代わりに、インライン アセンブラを使用します。

inline void DebugBreak()
{
#if defined(X86)
    __asm__ __volatile__("int 3");
#elif defined(ARM)
    __asm__ __volatile__("bkpt"); 
#else
  #error DebugBreak not defined for this architecture or no architecture defined.
#endif
}

x86 と arm で動作するはずです - アーキテクチャ選択マクロに「より良い」名前を付けたいと思うかもしれません - 私はさまざまなアーキテクチャであまり仕事をしていないので、正式な名前が何であるかを正確に覚えていません.

于 2013-04-17T10:36:31.370 に答える
2

これを設定する:

catch throw

あなたが求めているものをあなたに与えるべきです。

ユーザーマニュアルのこのセクションを参照してください。

于 2013-04-17T10:32:40.050 に答える