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