《深入剖析Nginx》一第2章  跟踪与调试

第2章  跟踪与调试

深入剖析Nginx
跟踪与调试,不仅是我们解决程序Bug的有力途径,也是帮助我们理解现有代码的有效方法。通过跟踪程序执行的过程,我们可以清楚地了解程序的内部逻辑,对于不明就里的实现细节,调试查看程序内部变量也能更好地帮助我们做出正确的理解。本章将介绍一些跟踪与调试程序的方法,除了最基本的 gdb 调试,我还将结合个人经验,介绍一些相对高级的应用技巧。

时间: 2024-11-17 11:41:21

《深入剖析Nginx》一第2章  跟踪与调试的相关文章

《深入剖析Nginx》——第2章  跟踪与调试2.1 利用gdb调试

第2章 跟踪与调试 跟踪与调试,不仅是我们解决程序Bug的有力途径,也是帮助我们理解现有代码的有效方法.通过跟踪程序执行的过程,我们可以清楚地了解程序的内部逻辑,对于不明就里的实现细节,调试查看程序内部变量也能更好地帮助我们做出正确的理解.本章将介绍一些跟踪与调试程序的方法,除了最基本的 gdb 调试,我还将结合个人经验,介绍一些相对高级的应用技巧. 2.1 利用gdb调试 gdb是Linux下调试程序的常用工具,任何Linux开发工程师初学程序调试时第一个接触到的工具应该就是gdb.关于gdb

《深入剖析Nginx》一2.1 利用gdb调试

2.1 利用gdb调试 深入剖析Nginx gdb是Linux下调试程序的常用工具,任何Linux开发工程师初学程序调试时第一个接触到的工具应该就是gdb.关于gdb本身的详细用法,我们不多详述,读者可以参考gdb官网手册1,而在这里,我们将重点介绍一些与Nginx相关的注意点与调试技巧. 2.1.1 绑定Nginx到gdb 利用gdb调式Nginx,首先得在生成Nginx程序时把-g编译选项打开.当然,这并不是说不打开-g选项就无法用gdb调试它,只是会因为缺少相应的符号信息导致调试不便,而此

《深入剖析Nginx》——第1章 源码分析的准备工作1.1 主要特性

第1章 源码分析的准备工作 从Nginx(读作engine x)的官方网站,我们可以看到如下介绍:Nginx是Igor Sysoev编写的一款HTTP和反向代理服务器,另外它也可以当作邮件代理服务器.它一直被众多流量巨大的俄罗斯网站所使用,例如Yandex.Mail.Ru.VKontakte以及Rambler等.据Netcraft统计,截止到2012年8月份,世界上最繁忙的网站中有11.48%在使用Nginx作为其服务器或者代理服务器.部分典型成功案例有:Netflix.Wordpress.co

《深入剖析Nginx》——2.3 利用strace/pstack调试Nginx

2.3 利用strace/pstack调试Nginx Linux下有两个命令strace1和ltrace2可以分别用来查看一个应用程序在运行过程中所发起的系统函数调用和动态库函数调用,这对作为标准应用程序的Nginx自然同样可用.由于这两个命令大同小异,下面就仅以strace为例做简单介绍,大致了解一些它能帮助我们获取哪些有用的调试信息.关于strace/ltrace以及后面介绍的pstack更多的用法请参考对应的Man手册. 从strace的Man手册可以看到几个有用的选项. p pid:通过

《深入剖析Nginx》——2.6 特殊应用逻辑的调试

2.6 特殊应用逻辑的调试 前面所讲的调试方法都是针对Nginx本身很容易跑到的逻辑,而对于某些只有在特定情况下才会被执行到的代码,又该怎样去调试呢?举个例子,我们知道Nginx里有大量的超时处理,比如,如果读取客户端请求头部数据超时,Nginx就将执行对应的超时处理函数,假设我想通过单步执行的方式来了解这部分相关逻辑,无疑就得让Nginx的执行逻辑走到这条路径上来.由于此时影响Nginx行为的决定因素是客户端所发送的请求头部数据,我们就必须在客户端做动作来构造出这种场景.一般的浏览器,如IE.

《深入剖析Nginx》一1.5 测试辅助工具

1.5 测试辅助工具 深入剖析Nginx我们将在第2章里介绍如何对Nginx进行跟踪与调试,除了对Nginx进程进行直接的跟踪与调试的工具以外,还会用到另外两个HTTP测试工具:wget1与curl2.关于这两个工具的差别,可以看这里3,要注意的主要是wget 1.12及以前的版本仅支持HTTP 1.0协议(虽然也包括部分HTTP 1.1的特性),所以在测试HTTP 1.1的相关特性时,最好使用wget-1.13以后版本或curl.另外,通过给wget加上--debug选项或给curl加上-v选

《深入剖析Nginx》——1.5 测试辅助工具

1.5 测试辅助工具 我们将在第2章里介绍如何对Nginx进行跟踪与调试,除了对Nginx进程进行直接的跟踪与调试的工具以外,还会用到另外两个HTTP测试工具:wget与curl.关于这两个工具的差别,可以看这里,要注意的主要是wget 1.12及以前的版本仅支持HTTP 1.0协议(虽然也包括部分HTTP 1.1的特性),所以在测试HTTP 1.1的相关特性时,最好使用wget-1.13以后版本或curl.另外,通过给wget加上--debug选项或给curl加上-v选项能看到它们请求的详细信

《深入剖析Nginx》一2.2 利用日志信息跟踪Nginx

2.2 利用日志信息跟踪Nginx 深入剖析Nginx 优秀的程序都会带有自己的日志输出接口,并且一般还会给出不同等级的输出级别,以便于重次信息的过滤,比如 Linux 内核的日志输出标准接口为 printk,并且给出了KERN_EMERG.KERN_ALERT.KERN_DEBUG等这样的输出等级.Nginx 与此类似,下面具体来看. 为了获取最丰富的日志信息,我们在进行configure配置时,需要把--with-debug选项加上,这样能生成一个名为NGX_DEBUG的宏,而在Nginx源

《深入剖析Nginx》一第1章 源码分析的准备工作

第1章 源码分析的准备工作 深入剖析Nginx 从Nginx(读作engine x)的官方网站1,我们可以看到如下介绍:Nginx是Igor Sysoev2编写的一款HTTP和反向代理服务器,另外它也可以当作邮件代理服务器.它一直被众多流量巨大的俄罗斯网站所使用,例如Yandex3.Mail.Ru4.VKontakte5以及Rambler6等.据Netcraft统计,截止到2012年8月份,世界上最繁忙的网站中有11.48%7在使用Nginx作为其服务器或者代理服务器.部分典型成功案例有:Net