简单易懂的gdb调试进程方法,更新中。。。
1、首先找出需要调试的进程PID:命令:ps -ef | grep 进程名;
2、gdb attach PID(中断进程,并附着进程,接下来就可以调试了);
3、设置断点:break 函数名/文件名:行号;比如,b FuncCheck,b main.cpp:1050;
info break:查看断点信息;删除断点:delete Num(断点号);
4、输入 continue /c 继续执行,程序会运行到断点处;(PS:别用run命令,因为你attach的是一个已经在运行的进程,你只需要让它继续跑就行)
之后可以输入next/n 进行单步调试(输入n后显示的那行代码,还未执行),输入后会打印该行的代码和行号;(Ctrl+A+X 可以显示调试的代码,PS:代码是本地的代码,so里面只有二进制码,可以 info source查看链接代码的路径)
输入print/p 变量名 查看变量信息;比如:p iRet;
输入step/s 进入当前行的函数;
设置变量值:set var l_num=4396;set var l_string="2200";
5、detach,退出进程附着,之后进程就正常运行;
若continue之后,代码一直没有跑到断点处,Ctrl+Z退出,ps -ef | grep gdb找出gdb attach的进程,kill -9 pid之后可继续正常调试;
6、core了之后,使用gdb调试core文件,排查原因:gdb ./bin/xxxx(程序名);core-file core.xxxx;bt(查看堆栈)