38

ブレークポイントなしで GDB の実行を停止するにはどうすればよいですか?

4

5 に答える 5

29

通常の割り込みを使用するCtrlだけで、c問題なく動作します。GDB は単にSIGINTデバッグ プロセスに転送し、デバッグ プロセスは終了します。GDB は非標準の終了をキャッチし、そこでプロセスを中断するため、すべてのスレッド、それらのスタック、および変数の現在の値を引き続き調べることができます。これは問題なく動作しますが、ブレーク ポイントを使用したほうがよいでしょう。私がこれをしていることに気付くのは、ある種の無限ループに陥ったと思うときだけです.

于 2009-01-07T19:19:28.117 に答える
12

GUIアプリケーションは、コンソールアプリケーションのように^Cおよび^Breakに反応しません。最近のほとんどの重要なプロジェクトは、主にGUIアプリケーションで使用されるGUIアプリケーションまたはライブラリである傾向があるため、次の2つのオプションがあります。

  1. 別の端末からアプリケーションにSIGSTOPを送信します。これは面倒です。

  2. GDBプロンプトで^Cまたは^Breakを押すと、GDBは終了しますが、アプリケーションは実行されたままになります。-pその後、コマンドラインスイッチを使用してGDBを再度実行して接続できます。これにより、デバッガーの状態が失われます。

どちらの場合も、これが役立つ場合があります。これを変更して、シェルスクリプト、makefileで使用したり、GDBをアタッチする代わりにシグナルを送信したりできます。tasklist | grepProcessName| sed -e 's/ProcessName*\([0-9]*\).*/gdbModuleName-pid=\1/' > rungdb.sh

info threadsどのスレッドを見たいかを理解するのに役立ちます。次に、を使用threadThreadNumberして切り替えます。

于 2011-06-27T16:17:10.140 に答える
8

シェルを起動し、ps を使用してプロセス ID を見つけ、kill コマンド (例: kill -INT pid) を使用して SIGSTOP または SIGINT を送信します。

于 2009-01-07T19:45:55.583 に答える
7

引数なしで BREAK と入力するだけです。

Break は、引数なしで呼び出されると、選択されたスタック フレームで実行される次の命令にブレークポイントを設定します。

于 2009-01-07T19:20:40.440 に答える