27

プログラムをキャンセルすると、セグメンテーション違反が発生します。デバッグにgdbを使用していますが、問題は、デバッグ中にCtrl-Cを押すと、gdbがプログラムをキャンセルせず、プログラムを停止することになっていることを実行することです。

私が欲しいのは、Ctrl-Cを実行し、gdbがそれを停止できないようにすることです。これを行う方法はありますか?デバッグに関する他の推奨事項はありますか?問題がどこから来ているのかはっきりとわからないので、printfを使用できません。

4

4 に答える 4

36

gdb がシグナルを傍受しています。CTRL-C を押すと、実際には端末ドライバーに SIGINT を生成させます。

あなたがする必要があるのは、シグナルコマンドを使用してGDBにSIGINTを生成させることです。構文は

信号番号

man signal はシグナル番号を教えてくれます (この場合、SIGINT はシグナル 2 なので、それsignal 2を実行します)。

アップデート

案の定、シンボリック名を使用できます。 info signal名前などをすべて教えてくれます。

ところで、SIGINT 用のシグナル ハンドラがインストールされていて、何らかの理由で引数が正しくない可能性があります。

于 2009-02-16T18:07:34.780 に答える
26

handle SIGINT noprint pass別の方法は、プログラムを実行する前にgdbプロンプトで入力して、gdbがSIGINTをキャッチしないようにすることです。

于 2009-02-16T19:08:32.637 に答える
7

1つのオプションは、デバッガーで実行されていないときに生成されたコアファイルをgdbにロードすることです。gdb内から、と入力しcore-file [filename]ます。

于 2009-02-16T17:54:04.110 に答える
3

別の端末から CTRL-C (別名 SIGINT) を送信することもできます: kill -INT

于 2009-03-26T04:52:23.873 に答える