プロセス X がコマンドを実行している状況に直面しています (たとえば/bin/ls
)。プロセス X がコマンド ls を実行するとすぐに、 の関数にブレークポイントを設定したいと考えていますls
。
これを行う方法はありますか?
簡単な解決策は、問題のバイナリ (プロセス X によって呼び出される) を、デバッグ セッションでプロセスを開始し、事前に構成されたブレークポイントも適用する小さなシェル スクリプトでラップすることです。
その方法は2つ考えられます。
最も簡単なのは、set follow-fork-mode child
新しい新しいクライアント プロセスが作成されるたびに、GDB が子プロセスをデバッグすることです。ただし、このモードでは親プロセスをデバッグできなくなります。
子プロセス (ls
上記) で、最初に SIGCONT というシグナルを待機するコードを追加します。子プロセスが作成されるたびに、子プロセスの PID を使用して GDB (新しい GDB インスタンス) をアタッチし、シグナル SIGCONT を発行して続行します。
catch exec
[ 1 ] を使用してexec
通話を停止できます。
(gdb) catch exec
Catchpoint 1 (exec)
(gdb) r
Starting program: /tmp/a.out
process 7544 is executing new program: /bin/ls
Catchpoint 1 (exec'd /bin/ls), 0x00007ffff7ddfaf0 in _start () from /lib64/ld-linux-x86-64.so.2
その後、新しいプロセスでやりたいことが何でもできます。さまざまなフォーク関連のオプションについては、 dbrank0によるコメントのリンクも参照してください。