gdb用法(3)他の実行中のプロセスをデバッグする

1423 ワード

現在実行中の他のプロセスをデバッグする特別なデバッグ要件に遭遇することがあります.この場合、デバッガで直接実行できないプロセス、たとえばシステムの起動時にのみ実行できるプロセスがあります.また,プロセスによって生成されたサブプロセスをデバッグする必要がある場合は,この方式しか採用できない.GDBは実行中のプログラムをスケジューリングすることができ、開発者がプログラムを中断してステータスを表示し、その後、このプログラムを正常に実行し続けることができます.
GDBは、実行中のプロセスをデバッグする2つの方法を提供します.
1つはGDBコマンドラインでプロセスを指定するPIDであり、もう1つはGDBで「attach」コマンドを使用する.
たとえば、開発者はまずdebugmeプログラムを起動し、ユーザーの入力を待つようにすることができます.例は次のとおりです.
#./debugme
            Enter a string to count words:

次に、別の仮想制御局で、次のコマンドでプロセスに対応するプロセス番号を検出します.
# ps -ax | grep debugme
            555 pts/1 S 0:00 ./debugme

プロセスのPIDを取得すると、GDBを使用してデバッグできます.
# gdb debugme 555
            GNU gdb Red Hat Linux (5.3post-0.20021129.18rh)
            Attaching to program: /home/xiaowp/debugme, process 555
            Reading symbols from /lib/libc.so.6...done.
            ……

上記の出力情報において、Attaching to programで始まる行は、GDBがPID 555のプロセスに正常に付加されたことを示す.
別のプロセスに接続する方法は、fileコマンドでデバッグに必要なシンボルテーブルをロードしてから、「attaché」コマンドで接続することです.
(gdb) file /home/xiaowp/debugme
            Reading symbols from /home/xiaowp/debugme...done.
            (gdb) attach 555
            ……

プログラムが現在どこで実行されているかを知りたい場合は、「backtrace」コマンドも使用できます.
もちろん「step」コマンドを使用してプログラムを単一ステップでデバッグすることもできます.デバッグが完了したら、detachコマンドで接続を解除して、デバッグされたプロセスが正常に動作するようにすることを忘れないでください.