ブレークポイントなしでGDB実行を停止するにはどうすればよいですか?
通常の割り込みを使用するだけです Ctrl-c うまくいきます。 GDBはSIGINT
をデバッグプロセスに転送するだけで、デバッグプロセスは終了します。 GDBは非標準の出口をキャッチしてそこでプロセスを中断するため、すべてのスレッド、そのスタック、および変数の現在の値を調べることができます。これは問題なく機能しますが、ブレークポイントを使用したほうがよいでしょう。私がこれをやっているのは、ある種の無限ループに入ったと思うときだけです。
GUIアプリケーションは、コンソールアプリケーションのように^ Cおよび^ Breakに反応しません。最近の重要なプロジェクトのほとんどは、主にGUIアプリケーションで使用されるGUIアプリケーションまたはライブラリであるため、2つのオプションがあります。
別の端末からSIGSTOPをアプリケーションに送信します。これは面倒です。
GDBプロンプトで^ Cまたは^ Breakを押すと、GDBは終了しますが、アプリケーションは実行されたままになります。次に、GDBを再度実行して、_-p
_コマンドラインスイッチを使用してGDBにアタッチできます。これはデバッガの状態を失います。
どちらの場合も、これが役立つことがあります:_tasklist | grep
_ProcessName
_| sed -e 's/
_ProcessName
*\([0-9]*\).*/gdb
ModuleName
_-pid=\1/' > rungdb.sh
_これを変更して、シェルスクリプト、メイクファイルで使用したり、GDBをアタッチする代わりにシグナルを送信したりできます。
_info threads
_は、どのスレッドを見たいかを理解するのに役立ちます。次にthread
を使用しますThreadNumber
それに切り替えます。
シェルを起動し、psを使用してプロセスIDを見つけ、killコマンドを使用してSIGSTOPまたはSIGINTを送信します(たとえば、kill -INT pid)。
引数なしでBREAKと入力するだけです。
Breakは、引数なしで呼び出されると、選択したスタックフレームで実行される次の命令にブレークポイントを設定します
Ctrl + Zが機能するようです(ただし、一部の場合のみ-理由はわかりません)。