すでに動作中のプログラムをデバッグしなければならないことがあります。動作中のプロセスにデバッグ機能を接続しなければならないのは、次のような場合です。
動作中のサーバーをデバッグしたいが、停止させたくない
動作中の GUI プログラムをデバッグしたいが、再起動したくない
プログラムが無限ループに入っているかもしれないので、プログラムを停止させずにデバッグしたい
このような場合は、動作中のプログラムのプロセス ID (process_id) を引数として dbx debug コマンドに渡せば、そのプログラムに dbx を接続することができます。
デバッグを終了すると、detach コマンドが使用され、プロセスを終了することなく dbx の制御からプログラムを解放することができます。
動作中のプロセスに接続されているときに dbx を終了すると、dbx は終了前に自動的な切り離しを行います。
dbx とは関係なく実行されるプログラムへ dbx を接続するには、attach コマンドまた は debug コマンドを使用します。
すでに実行中のプロセスへ dbx を接続するには、次のように入力します。
(dbx) debug program_name process_id |
または
(dbx) attach process_id |
program_name を – (ダッシュ) で置換することができます。 dbx は、プロセス ID と関連するプログラムを自動的に検索し、ロードします。
詳細については、「debug コマンド」と 「attach コマンド」を参照してください。
dbx が実行中でない場合は、次のように入力して dbx を開始します。
% dbx program_name process_id |
プログラムに dbx を接続すると、そのプログラムは実行を停止します。このプログラムは、dbx に読み込んだプログラムの場合と同様にして調べることができます。任意のイベント管理コマンドまたはプロセス制御コマンドを使用してデバッグできます。
既存のプロセスのデバッグ中に dbx を新規のプロセスに接続すると、次のようになります。
現在デバッグ中のプロセスを run コマンドを使用して開始すると、新規のプロセスに接続する前にプロセスが終了します。
現在のプロセスを attach コマンドを使用するか、またはコマンド行でプロセス ID を指定することによってデバッグを開始すると、新規のプロセスに接続する前に現在のプロセスから切り離されます。
dbx を接続しようとしているプロセスが、SIGSTOP、SIGTSTOP、 SIGTTIN、SIGTTOUT シグナルによって停止した場合、接続が成功し、次のようなメッセージが表示されます。
dbx76: warning: Process is stopped due to signal SIGSTOP
プロセスは検査可能ですが、プロセスを再開するためには、cont コマンドでプロセスに SIGCONT シグナルを送信する必要があります。
(dbx) cont -sig cont |
特定の例外がある接続済みプロセスで実行時チェック機能を使用できます。「接続されたプロセスへの RTC の使用」を参照してください。