6

GDB で浮動小数点例外 (SIGFPE) をキャッチしようとしていますが、それをプロセスに渡さずにデバッグを続行します。私はこれをgdbに与えました:

handle SIGFPE stop nopass

SIGFPE が発生すると、GDB は正しい場所で停止します。問題は、デバッグを続行する方法がわからないことです。GDBを与えてみました

continue

また

signal 0

しかし、それはまだ問題のある行でハングしており、続行を拒否しています。

シグナルを受信した後にデバッグを続行する方法はありますか?

私は自分でコンパイルしたGDB 7.5.1を使用しており、12.04 Ubuntuディストリビューションに付属しているGDB 7.4でも試しました。どちらも同じ動作をします。

4

1 に答える 1

7

問題は、同期シグナルの後にプログラムを続行すると、シグナルを発生させたのと同じ命令が再実行されることです。つまり、シグナルが再び発生するだけです。シグナルを無視するように (直接または gdb 経由で) 指示すると、その命令を繰り返し再実行するタイトなループに入ります。

シグナルを発生させた命令の後のどこかで実際にプログラムを続行したい場合は、コマンド$pcを発行する前にレジスタを次の (または他の) 命令に手動で設定する必要がありますcontinue

于 2013-03-27T15:38:53.717 に答える