GDB调试之重定向

如果需要用GDB调试一个正在运行的进程,可以先通过ps 命令查询到进程的ID,然后用

gdb -pid=ID号来启动对这个程序的调试,

如果进程很多,可以用grep过滤一下

ps ax | grep 进程名


也可以在启动gdb后用

atta  进程号的命令实现对进程的调试


gdb有个很强大的功能,就是其可以通过call命令调用外部函数,

但是在外面的这种情形,这个调用不能得到输出结果

例如调用待调试的进程的函数或者直接调用printf

如: call (void) printf("hello")

都不会有结果,这就涉及到一个输出重定向的问题

要把输出重定向到当前的调试终端才行,

这时只需要做两步,

第一步是关闭当然输出终端

call (int) close(1)    关闭了stdout

call(int) close(2)   关闭了stderr

第二步是获取当前虚拟终端信息

shell tty

第三步就是把当前的输入输出和这个虚拟终端关联起来

p (int) open("当前虚拟终端",1)

p (int) open("当前虚拟终端",2)


如果每次做这样的调试时都需要这样设置一下,会很麻烦,在.gdbinit里面

定义一重定向的函数,每次调用这个函数就可以了


如果还是看不到输出,则是因为有个缓存,调用fflush就可以了

call (int)fflush(0)


参考文献:

http://www.ibm.com/developerworks/cn/linux/l-cn-redirect/index.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值