0

プロセス X がコマンドを実行している状況に直面しています (たとえば/bin/ls)。プロセス X がコマンド ls を実行するとすぐに、 の関数にブレークポイントを設定したいと考えていますls

これを行う方法はありますか?

4

3 に答える 3

1

簡単な解決策は、問題のバイナリ (プロセス X によって呼び出される) を、デバッグ セッションでプロセスを開始し、事前に構成されたブレークポイントも適用する小さなシェル スクリプトでラップすることです。

于 2013-01-09T10:14:17.937 に答える
1

その方法は2つ考えられます。

  1. 最も簡単なのは、set follow-fork-mode child新しい新しいクライアント プロセスが作成されるたびに、GDB が子プロセスをデバッグすることです。ただし、このモードでは親プロセスをデバッグできなくなります。

  2. 子プロセス (ls上記) で、最初に SIGCONT というシグナルを待機するコードを追加します。子プロセスが作成されるたびに、子プロセスの PID を使用して GDB (新しい GDB インスタンス) をアタッチし、シグナル SIGCONT を発行して続行します。

于 2013-01-09T13:11:55.410 に答える
0

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によるコメントのリンクも参照してください。

于 2013-01-12T01:16:31.973 に答える