例外をスローしてエラーから回復するアプリケーションを作成しています。
ただし、デバッグするときは、例外がスローされる前に、エラーの時点でデバッガーを停止したいと考えています。とにかく、GDBが何らかのコードで実行を中断するコードを追加することはありますか?
私は ARM と x86 の両方のアーキテクチャに興味があります。いくつかのクロスプラットフォームが役立つでしょう。
編集:ブレークポイント命令またはそれをラップするマクロを探しています。
コードに「ブレークポイント命令」を追加できます。私が知っているほとんどの 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 で動作するはずです - アーキテクチャ選択マクロに「より良い」名前を付けたいと思うかもしれません - 私はさまざまなアーキテクチャであまり仕事をしていないので、正式な名前が何であるかを正確に覚えていません.