接着上一篇,我们学习 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参数的更多相关文章

  1. 聊聊、Nginx GDB与MAIN

    上一篇文章主要介绍了 Nginx 在 Window 和 Linux 平台上的安装.本章节主要介绍 Nginx 源码学习方法和源码结构,以及 Nginx 启动时 main 方法的位置,参数信息.后面的章 ...

  2. gdb 调试main

    gdb 调试main带参数 gdb program start a b c//参数为a b c然后从main函数开始 r a b c//参数为a b c来运行程序

  3. Nginx 笔记(四)nginx 原理与优化参数配置 与 nginx 搭建高可用集群

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.nginx 原理与优化参数配置 ​ ​ master-workers 的机制的好处 首先,对于每个 ...

  4. nginx 高并发配置参数(转载)

    声明:原文章来自http://blog.csdn.net/oonets334/article/details/7528558.如需知道更详细内容请访问. 一.一般来说nginx 配置文件中对优化比较有 ...

  5. nginx响应高并发参数配置

    一.一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1.  worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu ...

  6. Nginx核心配置文件常用参数详解

    Nginx核心配置文件常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于Nginx权威文档的话童鞋们可以参考Nginx官方文档介绍:http://nginx.org/ ...

  7. 【转】 nginx rewrite 伪静态配置参数详细说明

    nginx rewrite 伪静态配置参数和使用例子 附正则使用说明 正则表达式匹配,其中: * ~ 为区分大小写匹配  * ~* 为不区分大小写匹配  * !~和!~*分别为区分大小写不匹配及不区分 ...

  8. nginx 高并发配置参数

    一.一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1.  worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu ...

  9. [转帖]nginx sendfile tcp_nopush tcp_nodelay参数解释

    nginx sendfile tcp_nopush tcp_nodelay参数解释 2013-06-25 13:59:40 zmj_88888888 阅读数 20425 文章标签: nginxtcp_ ...

随机推荐

  1. Arduino ESP8266编程深入要点

    Arduino for ESP8266的话,如果不修改代码,默认没有办法进入轻睡眠的省电模式,只能进入Modem Sleep,也就是说Wifi可以暂时睡眠但是CPU没法睡,Modem Sleep最低功 ...

  2. 数据库操作----找了MySQL和SQL Sever两个的基础语句

    这是MySQL的基本操作: 1 登入数据库:mysql -uroot -p+密码 (SQL Sever登入: osql -U 用户名 -P 密码) 显示已存在的数据库:show databases; ...

  3. 本号讯 | 人工智能手表为帕金森患者带来书写希望;微软翻译发布可实时翻译幻灯片的Presentation Translator

    7 月 12 日,微软成立微软研究院人工智能中心(Microsoft Research AI).这是一个隶属于微软研究体系内的科研和孵化中心,将聚焦于解决最复杂的人工智能挑战. 这支由科学家和工程师组 ...

  4. js使用my97插件显示当前时间,且select控制计算时间差

    做页面需要两个时间输入框一个显示当前时间,一个显示之前的时间,并且需要一个select下拉框控制两个时间输入框之间的差,效果如下图: 这里使用的是My97DatePicer,简单方便,引入my97插件 ...

  5. jQuery工作中遇到的几个插件

    图片上传插件:uploadify 表单验证插件:formValidator

  6. JS函数的length属性

    length 是函数对象的一个属性值,指该函数有多少个必须要传入的参数,那些已定义了默认值的参数不算在内,比如function(xx = 0)的length是0.. 另外在函数内部:arguments ...

  7. Java压缩字符串工具类

    StringCompressUtils.java package javax.utils; import java.io.ByteArrayInputStream; import java.io.By ...

  8. Python 继承实现的原理(继承顺序)

    继承顺序 Python3 : 新式类的查找顺序:广度优先 新式类的继承: class A(object): Python2 3 都是了 MRO算法--生成一个列表保存继承顺序表 不找到底部 Pytho ...

  9. 【转】OS X 中快速调出终端

    作者:Frank Pu链接:https://www.zhihu.com/question/20692634/answer/37152883来源:知乎著作权归作者所有,转载请联系作者获得授权. 来至 M ...

  10. java基础——Map集合

    Map以键值对的形式存储数据,其中Map.entry,是Map的内部类,它用来描述Map中的键值对.Map是一个接口,HashMap是他的一个实现类 Map中有几个重要的方法: get(Object ...