Chinaunix首页 | 论坛 | 博客
  • 博客访问: 547391
  • 博文数量: 146
  • 博客积分: 5030
  • 博客等级: 大校
  • 技术积分: 1820
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-16 20:57
文章分类

全部博文(146)

文章存档

2011年(1)

2010年(4)

2009年(30)

2008年(111)

我的朋友

分类: C/C++

2009-09-27 16:11:37

Windows环境下对Apache进行源代码级跟踪调试
Apache Server源代码的调试跟普通程序不太一样,因为它不是一个直接可以从IDE环境运行的独立程序。笔者最先也是感觉无从下手,网上这方面的资料很少,我也是经过摸索才得以解决,这里写出来希望对研究Apache源代码的朋友有所帮助。
Apache Server的源代码量很大(几十万行),读起来很是费劲。但是如果能够在源代码级动态调试把代码跟踪一遍,采用这样的方式阅读源代码必将事半功倍。
要声明的是:如果想要在Windows环境下在源代码级别进行跟踪调试,首先必 须将源代码编译通过。笔者是通过Visual Studio.net2003编译通过的,Apache的版本为2.2.4,下载名为httpd-2.2.4-win32-src,可以在Apache的 官方网站上下载到。
要在Visual Studio.net下将Apache编译通过也并非易事,这里不讲这个。我们假定你已经通过Visual Studio.net将Apache编译通过并且以Debug方式安装到本地计算机上,并假设你的安装根目录为D:\Apache22。
 
(1)先启动Apache服务器,通过命令行方式如下
path D:\Apache22\bin    #设置环境变量
httpd –k install          #安装
httpd –k start           #启动
 
(2)启动Visual Studio.net IDE环境,并设置断点
启动vs.net环境,打开Apache解决方案。找到你确定执行一个http 请求一定要执行的代码(笔者自己写一个处理模块。如果你没有自己的写的模块,只想阅读源代码,建议打开工程中的libhttpd模块的mpm_winnt 文件夹下的child.c,在L775的处理http连接的函数ap_process_connection调用处设置一个断点,所有的http请求都会经过这里。
 
(3)找到你要调式的Apache进程
Apache在windows环境下运行时有一个父进程和一个子进程。打开任务 管理器,可以看到进程列表中有两个名为”httpd.exe”的进程,可以通过其线程数的多少来区分父子进程。默认情况下是无法看到进程所拥有的线程数。 你可以通过任务管理器的查看->选择列菜单打开如下所示:
将线程计数项勾上,然后确定就可以看到进程的线程数。其中线程数多(大约254左右)的就是子进程。 
(4)将源代码与进程关联
选择vs.net的调试->进程菜单,打开如下进程对话框:
注意选中下面的”显示系统进程”,然后选中子进程,单击右边的”附加”按钮,打开如下:
如图选中Common Language Runtime和Native两项,然后确定,并关闭进程对话框。这是你会发现vs.net已经处理调试状态。
 
(5)触发调试
    在IE浏览器地址栏中输入” ”,如果前面的步骤都正确,这时程序会在你设置断点的地方停下来(第一次时间比较长,系统需要加载一些调试信息)。这时你就可以跟随断点轻松了解Apache是如何处理http请求消息,进而了解Apache的内核及工作原理。
阅读(1028) | 评论(0) | 转发(0) |
0

上一篇:第五个心理问题

下一篇:开始听白眉大侠

给主人留下些什么吧!~~