web-dev-qa-db-ja.com

アプリケーションが応答しないときにgdbで実行されているアプリケーションを正常に終了する方法。

これは多少関連しています gdb set overwrite logging on should should overwrite gdb.txt correct?

アプリケーションのセッションを実行しているとしましょう。例として、qbittorrentの例をもう一度見てみましょう。

前に共有したように、これは実行がどのように発生するかです-

$ gdb qbittorrent 
(gdb) set logging overwrite on 
(gdb) set logging on 
(gdb) set pagination 0
(gdb) run

私が知っている1つの方法は、アプリケーションを正常に終了することですが、アプリケーションがハングしたり、時間がかかりすぎたり、単に応答しない場合があります。

次に、私に残っている唯一のオプションは、CTRL+Cを使用することです。これは、基礎となるアプリケーション(この例ではqbittorrent)を正しく強制終了し、次の方法でgdbを終了できることを理解している場合です。

(gdb) quit

アプリケーションを終了してgdbセッションを実行し続ける方法は他にありますか、それとも唯一の方法は上記の粗雑な方法です。

AFAIは、アプリケーションプロセスを強制終了することが、最初ではなく最後のソリューションであることを認識しています。

2
shirish

これにはシグナルを使用できます。プログラムを開始する前に、プログラムに影響を与えずにgdbを中断するようにUSR1またはUSR2を設定します。

handle SIGUSR1 nopass

次に、プログラムを実行できます。プログラムを停止する必要がある場合は、適切な(子)pidを使用して別のシェルからkill -USR1を実行します。 gdbはアプリケーションを一時停止し、ブレークポイントを追加したり、状態を調べたりすることができます。必要に応じて、contを使用して実行を続行します。

1
Stephen Kitt