聊聊、Nginx GDB与MAIN参数
接着上一篇,我们学习 Nginx 的 main 方法。用 gdb 工具调试 Nginx,首先 gdb nginx。如下:
gdb 调试工具有很多的命令,上一篇为了找 main 方法用了 b 命令,也就是 breakpoint 的意思。输入 b main。
要调试必须得先启动 Nginx,输入 r 命令,也就是 run 的意思。
ok,到这里我们就启动了 Nginx。到 win 系统下我们拷贝的源代码中,我们来看看 main 方法中到底有什么。每个部分又有什么作用。
这里是一部分 main 方法,也就是今天要讲的内容。
首先,我们看看,main 方法的两个参数,argc 和 argv。一个是 int 类型,一个是 char 指针数组。关于指针,数据结构大家可以看看C语言相关知识。
上面我们已经运行起来了 Nginx,我们输入 p argc 命令 看看 argc 参数中是什么内容。
$1 = 1,也就是 argc 内容为 1。再输入 p argv。
$2 = (char * const ) 0xbfc971d4,内容为 (char const *) 0xbfc971d4。这是一个指针数组地址。并没有看到里面到底是什么数据。仅仅是一个地址而已。
我们知道了参数 argc 内容为整数 1 。为了证实内容真的为 1 。我们去它的内存空间看看。输入命令 p &argc。
x/4b 的意思是查看地址的前 4 个字节。我的系统是 32 位的,有点老了,如果是 64 位系统则 x/8b。int 类型数据在 32 位系统占 4个字节。大家可以看到打印出来的前 4 个字节为:
0xbfc97150: 0x01 0x00 0x00 0x00。这个地址一看就知道是小端地址,排完序为 0x00000001。也就是整数 1。
接着我们看看参数argv内存中数据是什么。
这是什么东东。我们来拼接一下,/usr/local/nginx/sbin/nginx。
原来 argv 指针数组里面存的是 /usr/local/nginx/sbin/nginx。也就是我们 Nginx 启动目录。我们接着输入 p argv[0] 命令,看看第一个参数是不是 /usr/local/nginx/sbin/nginx。
没错,还真是的。好,到这里我们知道了main方法两个参数的内容,argc = 1,argv[0] = “/usr/local/nginx/sbin/nginx”。
这两个参数是在编译的时候就已经存在,而且是放在堆栈上面。argc = 1表示有一个参数,这个参数就是argv[0]的值。
至于为什么传这个参数,后面会用到。
我们接着讲mian方法,下面是:
ngx_buf_t *b;
ngx_log_t *log;
ngx_uint_t i;
ngx_cycle_t *cycle, init_cycle;
ngx_conf_dump_t *cd;
ngx_core_conf_t *ccf;
这些都是 Nginx 自己的数据结构,输入 ptype 命令可以看到结构信息。不过一般查询这些数据结构去源码里面搜索,这样利于以后查找问题。
时间原因,就到这里,没有讲完计划的内容,下篇继续。谢谢大家观看!
聊聊、Nginx GDB与MAIN参数的更多相关文章
- 聊聊、Nginx GDB与MAIN
上一篇文章主要介绍了 Nginx 在 Window 和 Linux 平台上的安装.本章节主要介绍 Nginx 源码学习方法和源码结构,以及 Nginx 启动时 main 方法的位置,参数信息.后面的章 ...
- gdb 调试main
gdb 调试main带参数 gdb program start a b c//参数为a b c然后从main函数开始 r a b c//参数为a b c来运行程序
- Nginx 笔记(四)nginx 原理与优化参数配置 与 nginx 搭建高可用集群
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.nginx 原理与优化参数配置 master-workers 的机制的好处 首先,对于每个 ...
- nginx 高并发配置参数(转载)
声明:原文章来自http://blog.csdn.net/oonets334/article/details/7528558.如需知道更详细内容请访问. 一.一般来说nginx 配置文件中对优化比较有 ...
- nginx响应高并发参数配置
一.一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1. worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu ...
- Nginx核心配置文件常用参数详解
Nginx核心配置文件常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于Nginx权威文档的话童鞋们可以参考Nginx官方文档介绍:http://nginx.org/ ...
- 【转】 nginx rewrite 伪静态配置参数详细说明
nginx rewrite 伪静态配置参数和使用例子 附正则使用说明 正则表达式匹配,其中: * ~ 为区分大小写匹配 * ~* 为不区分大小写匹配 * !~和!~*分别为区分大小写不匹配及不区分 ...
- nginx 高并发配置参数
一.一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1. worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu ...
- [转帖]nginx sendfile tcp_nopush tcp_nodelay参数解释
nginx sendfile tcp_nopush tcp_nodelay参数解释 2013-06-25 13:59:40 zmj_88888888 阅读数 20425 文章标签: nginxtcp_ ...
随机推荐
- servlet config
<webapp> <!--servlet是指编写的Servlet的路径,以及定义别名--> <servlet> <servlet-name>test&l ...
- Python3+Selenium3+webdriver学习笔记5(模拟常用键盘和鼠标事件)
#!/usr/bin/env python# -*- coding:utf-8 -*- from selenium import webdriverfrom selenium.webdriver.co ...
- 总结jboss控制台,得出一下结论(数据库连接池相关)
jboss控制台中: http://127.0.0.1:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.jca%3Ase ...
- javaScript的注释、变量和基本数据类型
上一级写了javaScript是用来操作文档对象元素的,这一次带大家看看javaScriput的注释.变量和基本数据类型. 1.注释:注释是什么呢?注释其实就是阻止浏览器解析某一行或者多行代码或描述的 ...
- ASP.NET WebForm & MongoDB
ASP.NET WebForm & MongoDB 最近在朋友介绍下,也跟着看AngularJS 买了一本三合一的书,Node.JS+MongoDB+AngularJS http://www. ...
- Android(java)学习笔记133:Eclipse中的控制台不停报错Can't bind to local 8700 for debugger
[DDMS] Can't bind to local 8600 for debugger 改成 Under Window -> Preferences -> Android -> D ...
- hdparm - 获取/设置硬盘参数
总览 hdparm [ -a [扇区数] ] [ -A [0|1] ] [ -c [芯片组模式] ] [ -C ] [ -d [0|1] ] [ -f ] [ -g ] [ -i ] [ -k [0| ...
- cityspace
类别的网址:https://blog.csdn.net/u010069760/article/details/77847595 r,g,b: 250 170 160 parking 244 35 ...
- Url Rewrite 重写
前几天看到园子里一篇关于 Url 重写的文章<获取ISAPI_Rewrite重写后的URL>, URL-Rewrite 这项技术早已不是一项新技术了,这个话题也已经被很多人讨论过多次.搜索 ...
- 学习笔记(五): Feature Crosses
目录 Feature Crosses Encoding Nonlinearity Kinds of feature crosses Glossay Crossing One-Hot Vectors P ...