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);

posted @   豪崽_ZH  阅读(106)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示