我面临的情况是我有进程X执行a
一个命令(比如/bin/ls
)。一旦进程X执行命令ls
我想在ls
的函数中放置一个断点。
有没有办法做到这一点?
答案 0 :(得分:1)
一个简单的解决方案可能是在一个小的shell脚本中包装有问题的二进制文件(由进程X调用),该脚本脚本在调试会话中启动进程并应用预先配置的断点。
答案 1 :(得分:1)
我可以想到两种方法。
最简单的是set follow-fork-mode child
每当创建新的客户端进程时,GDB都会调试子进程。但是,使用此模式,您将无法再调试父进程。
在子进程(上面提到的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。