我有一个由另一个进程调用的进程,由另一个进程调用,等等.这是一个长工具链中的子进程.
这个过程正在崩溃.
我想在gdb中捕获这个过程,以了解它崩溃的原因.但是,我能想到的唯一方法是:
ps -C <name process I want to catch>
并获得PID.这很麻烦但通常可以胜任.问题是当前的故障运行得非常快,当我捕获PID并启动gdb时,它已经通过了故障点.
我想启动gdb而不是:
(gdb) attach <pid>
Run Code Online (Sandbox Code Playgroud)
我想要做:
(gdb) attach <process name when it launches>
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
我在linux上使用gdb 7.1
fch*_*hen 22
这是我的脚本名为gdbwait:
#!/bin/sh
progstr=$1
progpid=`pgrep -o $progstr`
while [ "$progpid" = "" ]; do
progpid=`pgrep -o $progstr`
done
gdb -ex continue -p $progpid
Run Code Online (Sandbox Code Playgroud)
用法:
gdbwait my_program
Run Code Online (Sandbox Code Playgroud)
当然它可以更好地编写,但Bourne shell脚本语法对我来说是痛苦的,所以如果它有效,那么我就不管它了.:)如果新进程启动并且死得太快,请在自己的程序中添加1秒延迟进行调试...
在Mac OS X上,您可以使用:
(gdb) attach --waitfor <process-name>
Run Code Online (Sandbox Code Playgroud)
但是这有时也无法捕获很快退出的进程.我不确定这是否在任何其他平台上都受支持.
适用于Mac OS X v10.5 WWDC Seed的GDB发行说明