Next: , Previous: Input/Output, Up: Running


4.7 既に実行中のプロセスのデバッグ

attach process-id
GDBの外で起動され、 既に実行中のプロセスにアタッチします (info filesコマンドで、 現在デバッグ対象となっているプログラムの情報が表示されます)。 このコマンドは、 プロセスIDを引数に取ります。 UNIXプロセスのプロセスIDを知るのに通常使用する方法は、 psユーティリティ、 または、 シェル・コマンドの‘jobs -l’の実行です。

attachコマンドを実行後<RET>キーを押しても、 コマンドは再実行されません。

attachコマンドを使用するには、 プロセスをサポートする環境でユーザ・プログラムを実行する必要があります。 例えば、 オペレーティング・システムの存在しないボード・コンピュータのような環境で動作するプログラムに対して、 attachコマンドを使うことはできません。 さらに、 ユーザは、 プロセスに対してシグナルを送信する権利を持っている必要があります。

attachコマンドを使用すると、 デバッガは、 まずカレントな作業ディレクトリの中で、 プロセスにより実行されているプログラムを見つけようとします。 (プログラムが見つからなければ) 次に、 ソース・ファイルのサーチ・パス (see Specifying source directories) を使用して、 プログラムを見つけようとします。 fileコマンドを使用して、 プログラムをロードすることも可能です。 See Commands to Specify Files

指定されたプロセスをデバッグする準備が整った後に、 GDBが最初にすることは、 そのプロセスを停止することです。 runコマンドを使用してプロセスを起動した場合は、 通常使用可能なすべてのGDBコマンドを使用して、 アタッチされたプロセスの状態を調べたり変更したりすることができます。 ブレイクポイントの設定、 ステップ実行、 継続実行、 記憶域の内容の変更が可能です。 プロセスの実行を継続したいのであれば、 GDBがプロセスにアタッチした後に、 continueコマンドを使用することができます。

detach
アタッチされたプロセスのデバッグが終了した場合には、 detachコマンドを使用してそのプロセスをGDBの管理から解放することができます。 プロセスからディタッチしても、 そのプロセスは実行を継続します。 detachコマンド実行後は、 ディタッチされたプロセスと GDBは互いに完全に依存関係がなくなり、 attachコマンドによる別のプロセスへのアタッチや、 runコマンドによる別のプロセスの起動が可能になります。 detachコマンドを実行後<RET>キーを押しても、 detachコマンドは再実行されません。

プロセスがアタッチされている状態で、 GDBを終了したりrunコマンドを使用したりすると、 アタッチされたプロセスを終了させてしまいます。 デフォルトの状態では、 このようなことを実行しようとすると、 GDBが確認を求めてきます。 この確認処理を行うか否かは、 set confirmコマンドで設定可能です (see Optional warnings and messages)。