1)安装依赖库zlib(gzip模块)、pcre(rewrite模块)、openssl(ssl功能)
sudo apt-get install libpcre3 libpcre3-devlibpcrecpp0 libssl-dev zlib1g-dev
2)下载后解压,重命名为nginx
tar xzvf nginx-1.2.2.tar.gz
3)修改nginx/auto/cc/conf文件加上-g参数,让nginx支持gdb调试
ngx_compile_opt="-c"
变为
ngx_compile_opt="-c -g"
变为如下才可以调试宏
ngx_compile_opt="-c -ggdb3"
4)执行configure(我安装目录在/home/user_name)
./configure --prefix=/home/user_name/nginx/
configure 参数说明:
--add-module=PATH -添加第三方模块,第三方模块由PATH路径指定
--conf-path=
--group=
--prefix=
--user=
5)make生成可执行文件
make
可执行文件在/home/user_name/objs/下
6)修改nginx.conf
添加:
daemon off; #配置为非守护进程启动,否则调试时,执行到判断nginx是否以daemon模式启动时退出调试
master_process off; #单进程模式,否则默认启动一个master进程、一个worker进程,并且调试时需要切人worker进程
7)启动nginx
sudo ./nginx
8)nginx启动、重启等相关命令
ps aux|grep nginx 查看nginx进程相关信息
kill -QUIT 主进程号 从容停止nginx
pkill -9 nginx 强制停止nginx
./nginx -s stop 杀死所有nginx进程
./nginx -s reload 重启
8)生成core崩溃转储文件
ps aux|grep nginx
sudo gcore 15255
sudo ./nginx -s stop
15255是nginx master进程号
ps -aux 查看进程信息
grep 搜索进程名字
9)启动调试
gdb ./nginx core.15255
10)gdb常用命令
list #列出源文件
break 213 #在213行打断点
run #从main函数开始运行程序
info proc #查看进程信息
info source #查看代码所属文件
info break #查看断点信息
delete breakpoint num #删除断点,监视的变量也属于断点
whatis 变量名 #查看变量类型
ptype 变量/类型 #查看类型定义
print 变量 #查看值
pwd #查看当前所在目录
continue #从断点开始继续运行
list #列出源文件,默认列出10行
break n #在第n行设置断点
run #从main函数开始运行程序
shell #切换到终端命令行输入命令,从shell中返回用exit
next #相当于VC F10
step #相当于VC F11
quit #终止gdb
watch 变量 #监视变量
set follow-fork-mode child #设置调试子进程
bt #查看调用堆栈
继续按回车键,执行上一个命令
输出完整字符串setprint element 0
11)启动时错误日志文件目录没有生成?提示找不到日志目录?
mkdir /home/user_name/nginx/logs
vi /home/user_name/nginx/conf/nginx.conf
将#error_log logs/error.log;
改为error_log logs/error.log debug;