码迷,mamicode.com
首页 > 其他好文 > 详细

nginx源码学习(三)

时间:2017-04-20 22:48:41      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:fonts   csdn   class   point   blank   是什么   原因   信息   数组   

接着上一篇,我们学习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源码学习(三)

标签:fonts   csdn   class   point   blank   是什么   原因   信息   数组   

原文地址:http://www.cnblogs.com/xums/p/6741096.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!