18GDB调试工具的简单使用
"遇到程序崩溃问题,所以需要借助gdb调试来找到崩溃行";
好在:我们的错误能够重现[必现的错误,是很好找的];
最怕的就是偶尔出现的bug;有的时候运行三个小时就出现,有的时候运行两天也不出现;
a)编译时g++ 要带这个 -g选项;make文件。
b)su进入root权限,然后再输入gdb nginx调试
c)gdb缺省调试主进程, 但是gdb 7.0以上版本可以调试子进程【我们需要“调试子进程”,因为干活的是worker process是子进程】;命令行下看版本 :gdb -v
d)为了"让gdb支持多进程调试,要设置一下 “follow-fork-mode” 选项" ,这是个调试多进程的开关; 取值可以是parent[主] /child[子] ,我们这里需要设置成child才能调试worker process子进程;查看follow-fork-mode:在gdb下 输入 "show follow-fork-mode", 输入(设置) "set follow-fork-mode child"
(e)还有个选项 "detach-on-fork", 取值为 on/off,默认是on【表示只调试父进程或者子进程其中的一个】,调试是父进程还是子进程,由上边的 follow-fork-mode选项说了算;如果detach-on-fork = off,就表示父子都可以调试,调试一个进程时,另外一个进程会被暂停;查看 show detach-on-fork; 输入(设置) set show detach-on-fork off,如果设置为off并且follow-fork-mode选项为parent,那么fork()后的子进程并不运行,而是处于暂停状态;
(f) 在终端里面输入:b logic/ngx_c_slogic.cxx:198,程序会在这行 "设置断点"
(g)run 运行程序"运行到断点";然后在客户端连接发送
(h)print。。..打印变量值。这些调试手段,大家自己百度学习;
(i)c命令,继续运行:c,客户端再次发包(现在就崩溃了)终端就显示出出问题的地方,nginx\net\ngx_c_socket.cxx:(this->* (c->rhandler) )(c);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?