分享一下我老师大神的人工智能教程!零基础,通俗易懂!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 <