0

我面临这样一种情况,其中我让进程 X 执行一个命令(比如说/bin/ls)。一旦进程 X 执行命令 ls 我想在ls.

有没有办法做到这一点?

4

3 回答 3

1

我可以想到两种方法来做到这一点。

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

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

于 2013-01-09T13:11:55.410 回答
1

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

于 2013-01-09T10:14:17.937 回答
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评论中的链接,了解各种与 fork 相关的选项。

于 2013-01-12T01:16:31.973 回答