1

ここで説明されている Windows Native Client デバッガーを使用して Native Client アプリケーションをデバッグした経験のある人はい ますか?

アプリケーションコードでソフトウェアブレークポイントまたは例外を発生させようとしています。これにより、接続され実行されている GDB が起動元のソース行で停止し、実行を継続できるようになります。

これを行うには、不正なアドレス例外を作成します。たとえば、次のようになります。

#define SOFTBREAK { int *p=0; p=0; }

これは、定義が使用されている場所でデバッガーに侵入します。

Program received signal SIGSEGV, Segmentation fault.
0x0000000c00209ba2 in CTestTestList::Init (this=0xfe55d080) at ../testlist.cpp:1242
1242    in ../testlist.cpp

ただし、ジャンプコマンドを使用してブレーク行をスキップして実行を継続できないようです(次のソース行またはアセンブリ アドレスを使用)。続行する前に、セグメンテーション違反を確認またはクリアする必要がありますか?

不正なアドレス例外を使用して実行を継続できるかどうかは誰にもわかりませんか? または、ソフトウェア例外 (EXC_SOFTWARE) を発生させるなど、使用できる別の方法はありますか? ヘルプやアドバイスをいただければ幸いです。

(ちなみに、これはスタック オーバーフローに関する私の最初の投稿なので、この投稿でエチケットに従わなかった場合はお詫びします。)

どうもありがとう、

アンディ

4

2 に答える 2

1

私は通常、同じ目的で無限ループを使用します。

volatile int var = 1;
while (var);

次に、デバッガーで対応するレジスターの値を変更します。

set $rax = 0
于 2012-02-02T13:08:31.057 に答える
0

こちらで__asm__("int3");詳しく説明されているように、winGDB で使用できます

~メイン

于 2012-02-02T22:53:21.917 に答える