前言:如果说gtest是静态地给程序把脉看病,分析问题,解决问题,那么GDB就是动态地实时地给程序分析和解决问题。(gtest相关链接:gtest的个人经验总结_《一刀流》-CSDN博客)
那么GDB如何动态地跟踪程序呢?这就不得不提ptrace系统调用了,它有点像现在的中间商,不过不赚差价,会一五一十地观察和控制子进程的一举一动。用户干嘛,它就让目标程序干嘛,不会乱来。
1.用法
网上总结了很多基本命令,这里就不赘余了,主要讲讲项目中GDB如何发挥他更大的作用。
a.首先你得知道,你需要调试的进程号,可以通过ps ax |grep xxx进行查看;
b.然后GDB,进入调试,通过attach xxx,依附你要调试的进程;
c.设置你的sysroot目录,set sysroot /;
d.在程序的一个必经之路,或者你想知道某个函数那里打断点,b xxx_func;
e.bt 可以多次用 //backtrace 查看函数的调用的栈帧和层级关系,简写bt
f.frame 1 //fr 1
g.info frame //frame:切换函数的栈帧
2.细节
a.可以先r运行一下,再ctrl c,保证程序启动;
b.info sharedlibrary 查询进程的依赖库;
c.info threads //*代表所在的线程;
d.thread apply all bt //所有线程的bt
e.thread apply 1 bt //第一个线程bt
f.set solib-search-path /opt/libs:/opt/webengine/lib //设置依赖库路径
g.gdb 进程 coredump //解coredump (gzip -d xxx 再bt)
友情链接:
LINUX下GDB的使用方法(简单说说)_longfan的博客-CSDN博客_gdb
gdb调试的基本使用_zdy0_2004的专栏-CSDN博客_gdb调试