接着上一篇,我们学习 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. ios 设置导航栏背景色

    //设置导航栏背景色 如果上面的不好用 就用下面的 [self.navigationController.navigationBar setBackgroundImage:[UIImage image ...

  2. 用NPOI操作EXCEL-锁定列CreateFreezePane()

    public void ExportPermissionRoleData(string search, int roleStatus) { var workbook = new HSSFWorkboo ...

  3. netbackup如何手动获取主机ID证书。

    如何手动获取主机ID证书.   文章:100039650 最后发布:2017-09-21 评分:  20 11 产品:NetBackup 问题 从NetBackup V8.1开始,管理员需要在证书颁发 ...

  4. pycharm创建工程的两种形式:virtualenv环境和系统默认编译器

    转自:http://swiftlet.net/archives/3151 pycharm创建工程的时候可以选择编译器,如下图所示: 上图表示创建工程有两种方式:第一种是利用:virtualenv,第二 ...

  5. python 基础之格式化输出

    字符占位符%s #_cvvh:"chenxi" #date: 2019/6/24 print ('chhjg') # 格式化输出 name = input("Name:& ...

  6. Vue-Quill-Editor 修改配置,和图片上传

    1.富文本编辑器中的图片上传是将图片转为base64格式的,如果需要上传图片到自己的服务器,需要修改配置. 创建一个quill-config文件 /*富文本编辑图片上传配置*/ /*富文本编辑图片上传 ...

  7. Makefile 编写实例

    make命令常用的三个选项: 1.-k:它的作用是让make命令在发现错误的时候仍然继续执行.我们可以利用这个选项在一次操作中发现未编译成功的源文件. 2.-n:它的作用是让make命令输出将要执行的 ...

  8. 01_1JAVA简介

    01_1JAVA简介 1. Java基础 语法基础.OO.Exception.Array.基础类.I/O Stream.Collection /Generic.Thread.TCP/UDP.GUI.M ...

  9. VueX源码分析(1)

    VueX源码分析(1) 文件架构如下 /module /plugins helpers.js index.esm.js index.js store.js util.js util.js 先从最简单的 ...

  10. Java JDBC的基本知识

    CallableStatement接口——主要调用数据库中的存储过程 即为一种方法,可以调用, 传递参数   delimiter // //这里是改变执行操作语句的分隔符,也就是将SQL语句的&quo ...