プログラムをキャンセルすると、セグメンテーション違反が発生します。デバッグにgdbを使用していますが、問題は、デバッグ中にCtrl-Cを押すと、gdbがプログラムをキャンセルせず、プログラムを停止することになっていることを実行することです。
私が欲しいのは、Ctrl-Cを実行し、gdbがそれを停止できないようにすることです。これを行う方法はありますか?デバッグに関する他の推奨事項はありますか?問題がどこから来ているのかはっきりとわからないので、printfを使用できません。
プログラムをキャンセルすると、セグメンテーション違反が発生します。デバッグにgdbを使用していますが、問題は、デバッグ中にCtrl-Cを押すと、gdbがプログラムをキャンセルせず、プログラムを停止することになっていることを実行することです。
私が欲しいのは、Ctrl-Cを実行し、gdbがそれを停止できないようにすることです。これを行う方法はありますか?デバッグに関する他の推奨事項はありますか?問題がどこから来ているのかはっきりとわからないので、printfを使用できません。
gdb がシグナルを傍受しています。CTRL-C を押すと、実際には端末ドライバーに SIGINT を生成させます。
あなたがする必要があるのは、シグナルコマンドを使用してGDBにSIGINTを生成させることです。構文は
信号番号
man signal はシグナル番号を教えてくれます (この場合、SIGINT はシグナル 2 なので、それsignal 2
を実行します)。
案の定、シンボリック名を使用できます。 info signal
名前などをすべて教えてくれます。
ところで、SIGINT 用のシグナル ハンドラがインストールされていて、何らかの理由で引数が正しくない可能性があります。
handle SIGINT noprint pass
別の方法は、プログラムを実行する前にgdbプロンプトで入力して、gdbがSIGINTをキャッチしないようにすることです。
1つのオプションは、デバッガーで実行されていないときに生成されたコアファイルをgdbにロードすることです。gdb内から、と入力しcore-file [filename]
ます。
別の端末から CTRL-C (別名 SIGINT) を送信することもできます: kill -INT