gdb attach到已经存在的进程进行在线调试------能获取当前栈的所有变量值

本文介绍了如何使用gdb的attach功能对已经运行的进程进行在线调试,以获取当前栈上的所有变量值。通过对比valgrind和strace,强调了gdb attach在服务端调试中的实用性。详细讲解了gdb attach pid和gdb a.out pid的用法,以及在实际开发中的应用场景。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

       不久前, 我们玩过valgrind定位程序的各类内存问题, 当时非常希望valgrind能对一个已经存在的进程进行attach在线调试, 后来看了valgrind的原理, 发现这样不可行。 只能让valgrind重新拉取新进程进行调试。

       在前面的文章中, 也介绍了kill -6和abort函数, 让程序core dump来获取当时栈的值, 其实, 这样似乎没有必要。 慢慢来看。

       我们再回忆下strace命令, 可以用strace -p pid, 附着到一个已经在跑的进程上, 实时观察进程。 那么, gdb能做到吗? 能! 这就是gdb的attch调试, 可以获取当前栈的所有变量值。

    

       回忆一下, 比如编译(加-g)后生成了a.out文件:

       1.  可以直接用gdb a.out来调试,  其实gdb拉取了新的进程。 类似于valgrind.

       2.  如果有core文件, 那么用gdb a.out core,  此时没有拉取新的进程。 在实际开发中, 这种方式常用。

 

       很多时候, 在服务端, 进程已经跑起来, 此时不再适合用gdb来拉取新的进程, 而期望用gdb附着到这个已经存在的进程, 如下两种方式是等价的:

       3. gdb attach pid  (注意, 没有拉取新的进程)

       4. gdb a.out pid    (注意, 没有拉取新的进程)

 

       看程序:

 

#include <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值