3

注: この質問は、iPhone の起動について私が尋ねた別の質問に由来しています:接続された iPhone でインストール済みのアプリを起動する

すべてのシグナル、特にクラッシュ ハンドラで使用する EXC_BAD_ACCESS をキャッチする必要がある状況があります。GDB がプロセスにアタッチされると、プログラムに処理させるのではなく、シグナルを処理してブレークします。

GDBには、handle all noprint pass nostopすべてのシグナルをプログラムに渡し、中断しないコマンドがあります。これは、シグナルリストにリストされていても、EXC_BAD_ACCESS を除く、私が試したすべてのシグナルで機能します。

現在、i386 Darwin 6.3.5 バージョンの GDB にもコマンドがありdont-handle-bad-access 1ます。これをオンにしてシグナルをトリガーすると、GDB はプログラムで SIGBUS に変わるシグナルを正常に渡します。

今、私の問題の核心です。接続された iPhone でリモートでデバッグしています。dont-handle-bad-access使用されている GDB バージョンは、残念ながらコマンドがない ARMV7 6.3.5 バージョンです。コマンドをオンのままにしhandle all noprint pass nostopてクラッシュをトリガーすると、デバッガーがハングし、デフォルトのままにすると、デバッガーがシグナルをキャッチし、シグナルハンドラーが入力されなくなります。

このバージョンの GDB を適切に取得して EXC_BAD_ACCESS シグナルを渡す方法はありますか、またはあらゆる種類のクラッシュまたはブレークでアクションをトリガーする方法はありますか (その場合、SIGBUS にシグナルを送るか、少なくともプログラムを終了できます) .

4

1 に答える 1

0

回避策は次のとおりです。設定ハンドルallprintpass nostopを使用し、エラーストリームを監視します。次のような行が表示された場合はProgram received signal ...、プロセスgdb-arm-apple-darwinを強制終了します。

于 2012-12-28T05:34:13.583 に答える