nginx源码gdb调试方式,从此nginx源码任你遨游。
##查看gdb版本
[yym@localhost code]$ gdb -v
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-120.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
##gdb下运行nginx程序
[yym@localhost nginx_debug]$ pwd
/home/yym/code/nginx_debug
[yym@localhost nginx_debug]$ gdb ./sbin/nginx -c ./conf/nginx.conf
##下断点
(gdb) b main
Breakpoint 1 at 0x40b9d1: file src/core/nginx.c, line 207.
(gdb) b ngx_epoll_process_events
Breakpoint 2 at 0x44f0f2: file src/event/modules/ngx_epoll_module.c, line 800.
##查看断点
(gdb) info breakpoint
Num Type Disp Enb Address What
1 breakpoint keep y 0x000000000040b9d1 in main at src/core/nginx.c:207
breakpoint already hit 1 time
2 breakpoint keep y 0x000000000044f0f2 in ngx_epoll_process_events at src/event/modules/ngx_epoll_module.c:800
##调试子进程
(gdb) set follow-fork-mode child
##运行
(gdb) r
Starting program: /home/yym/code/nginx_debug/./sbin/nginx
[Thread debugging using libthread_db enabled]
##查看堆栈
(gdb) bt
#0 main (argc=1, argv=0x7fffffffe438) at src/core/nginx.c:207
##单步
(gdb) n
211 if (ngx_get_options(argc, argv) != NGX_OK) {
##到下一个断点
(gdb) c
Breakpoint 2, ngx_epoll_process_events (cycle=0x7269a0, timer=18446744073709551615, flags=1) at src/event/modules/ngx_epoll_module.c:800
800 events = epoll_wait(ep, event_list, (int) nevents, timer);
##退出
(gdb) q