在其他进程启动的进程中设置断点

时间:2013-01-09 07:59:30

标签: c gdb

我面临的情况是我有进程X执行a 一个命令(比如/bin/ls)。一旦进程X执行命令ls 我想在ls的函数中放置一个断点。

有没有办法做到这一点?

3 个答案:

答案 0 :(得分:1)

一个简单的解决方案可能是在一个小的shell脚本中包装有问题的二进制文件(由进程X调用),该脚本脚本在调试会话中启动进程并应用预先配置的断点。

答案 1 :(得分:1)

我可以想到两种方法。

  1. 最简单的是set follow-fork-mode child每当创建新的客户端进程时,GDB都会调试子进程。但是,使用此模式,您将无法再调试父进程。

  2. 在子进程(上面提到的ls)中添加一些代码,以便在一开始就等待SIGCONT信号。每当创建子进程时,使用其子进程的PID将GDB(新GDB实例)附加到它,发出单一的SIGCONT以继续。

答案 2 :(得分: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

然后,您可以使用新流程执行任何操作。有关各种与fork相关的选项,另请参阅 dbrank0 link in the comment