热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

使用gdb调试Nginx程序

在修改nginx源码中学习到了如何gdb调试nginx代码,看运行方式,设置nginx源码运行断点,在断点处打印对应的变量的结构或者属性值。下面说说如何实现gdb调试nginx,我是在linux下调试的首先配置nginx安装程序找到nginx/auto/cc/conf文件,用vim或者什么打开
在修改nginx源码中学习到了如何gdb调试nginx代码,看运行方式,设置nginx源码运行断点,在断点处打印对应的变量的结构或者属性值。下面说说如何实现gdb调试nginx,我是在linux下调试的

首先配置nginx安装程序
找到 nginx/auto/cc/conf 文件,用vim或者什么打开,到第八行
找到:ngx_compile_opt="-c"
更改为: ngx_compile_opt="-c -g"

然后进行编译安装
./configure --user=www --group=www  --prefix=/nginx --add-module=../ngx_cache_purge-1.2 --with-pcre
 --with-http_sub_module --with-http_stub_status_module --with-http_ssl_module

这里的user和group 还有prefix是自己定义的
make 后确认一下,调试模式是否已经配置ok
查看 vim objs/Makefile 文件大概332行 发现
330 objs/ngx_modules.o:     $(CORE_DEPS) \
331         objs/ngx_modules.c
332         $(CC) -c -g $(CFLAGS) $(CORE_INCS) \
333                 -o objs/ngx_modules.o \
已经有  $(CC) -c -g "-g" 的配置,这说明配置成功了。

makeinstall
安装完毕后,我们看nginx的配置文件/nginx/conf/nginx.conf

看这个 daemon off; 配置,如果前面有# ,则使用下面的多线程配置
worker_processes   2;
worker_cpu_affinity  01 10;

如果没有#则是单进程模式运行。
我们用gdb调试,可以说有三种方式

在单线程模式下
1.运行 gdb /nginx/sbin/nginx ,进入后 输入 r (也就是run) 进入了gdb调试模式
2.或者./nginx/sbin/nginx 然后查询 对应的进程号  gdb p 进程号

在多线程下
3. ./nginx/sbin/nginx 查询对应的所有的进程号 并进行多个窗口打开,每个窗口独立gdb p 进程号
进入调试模式后,可以设置断点,继续监听等
这就是gdb调试nginx的简单操作

推荐阅读
  • 在中标麒麟操作系统上部署达梦数据库及导入SQL文件
    本文档详细介绍了如何在中标麒麟操作系统上安装达梦数据库,并提供了导入SQL文件的具体步骤。首先,检查系统的发行版和内核版本,接着创建必要的用户和用户组,规划数据库安装路径,挂载安装介质,调整系统限制以确保数据库的正常运行,最后通过图形界面完成数据库的安装。 ... [详细]
  • Nginx 启动命令及 Systemctl 配置详解
    本文详细介绍了在未配置和已配置 Systemctl 的情况下启动 Nginx 的方法,并提供了详细的配置步骤和命令示例。 ... [详细]
  • 本文详细介绍了如何利用Xshell配合Xftp实现文件传输,以及如何使用Pure-FTPd构建FTP服务,并探讨了VSFTP与MySQL结合存储虚拟用户的方法。 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
  • 本文探讨了有效学习专业技能的方法,包括编程语言、操作系统、软件组件及前沿技术的探索,旨在为初学者提供一套系统的自学指南。 ... [详细]
  • 本文介绍了在Linux环境下如何有效返回命令行状态、上一级目录及快速查找头文件和函数定义的方法。包括处理长时间运行命令、编辑器退出技巧、目录导航以及文件搜索策略。 ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • 1、什么是过滤器管道使用竖线(|)将两个命令隔开,竖线左边命令的输出就会作为竖线右边命令的输入。连续使用竖线表示第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入, ... [详细]
  • 构建个人多节点Linux环境(CodeSheep)
    本文介绍如何通过虚拟机搭建一个多节点的Linux环境,这对于学习、实验和项目部署都具有重要意义。文章详细讲解了网络IP设置、节点间通信等关键步骤。 ... [详细]
  • Linux系统快捷键大全及使用技巧
    本文详细介绍了Linux系统中的各种快捷键,包括命令行和VIM编辑器中的常用快捷键,帮助用户提高操作效率。同时,文章还提供了关于字体配置、软件安装等方面的实用信息。 ... [详细]
  • Ubuntu 14.04 系统安装后网卡名称修改方法
    本文介绍了在安装 Ubuntu 14.04 Server 版本后,如何将默认的网卡名称从非 eth 格式修改为传统的 eth 格式,并提供了详细的步骤和示例。 ... [详细]
  • 整理于2020年10月下旬:总结过去,展望未来Itistoughtodayandtomorrowwillbetougher.butthedayaftertomorrowisbeau ... [详细]
  • 本文介绍了编程语言的基本分类,包括机器语言、汇编语言和高级语言的特点及其优缺点。随后详细讲解了Python解释器的安装与配置方法,并探讨了Python变量的定义、使用及内存管理机制。 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
author-avatar
yangdawen1985_156
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有