web-dev-qa-db-ja.com

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

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

30
anand

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

22
luke

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

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

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

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

_info threads_は、どのスレッドを見たいかを理解するのに役立ちます。次にthreadを使用しますThreadNumber それに切り替えます。

12

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

7
zvrba

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

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

6
Chris Allwein

Ctrl + Zが機能するようです(ただし、一部の場合のみ-理由はわかりません)。

2
kralyk