用QT Creator部署,运行及断点调试Apache的C/C++模块
2015-10-27 00:00
567 查看
摘要: (C/C++开发Apache模块系列 第二章)创建Apache模块工程,及用QT Creator编译的方法已经在上一篇文章中介绍了。本文进一步说明如何用QT Creator部署,运行及断点调试Apache模块。重点说明断点调试。本章是开发环境搭建方法介绍的最后一章。本章结束后,后面的章节将会从HelloWorld说起,逐步结合实质的业务来说明Apache模块开发。
一 概述
本文所说的所有的部署,运行及断点调试这些操作都是在本地机器上进行的。而写出来的模块往往是部署并运行在远程的服务器上。所以这里说的都是开发环境的设置,至于测试环境及产生环境,本文内容并不涉及。(开发环境、生产环境、测试环境 的说明:http://my.oschina.net/sancuo/blog/214904)。本文关于断点调试的内容,大家可以看看了如下的文章:
http://httpd.apache.org/dev/debugging.html
《Apache Debugging Guide》
这实质上是Apache官网上的文章。说的就是Apache服务器的调试方法。阅读上面这个文章需要注意一个细微的差异:官网上的文说的是整个Apache服务器(Apache server)的调试方法,而本文所关注的是 Apache模块的调试方法。具体来说,官文调试整体,需要用“-g”选项重新编译整个Apache服务器;本文调试部分,“-g”选项只需要新编译指定的模块即可。(“-g”选项是gcc用于向目标文件加入调试信息的选项)
二 需求描述
2.1 参看上一章《QT Creator 加 apxs 搭建Apache模块开发环境》的第二小节。
本文的环境,需要在上一章的环境基础上再进行添加。所以上一章中所生成的工程可以直接拿来用。
2.2 安装 Command Line Tools
打开终端输入:
2.3 安装 gdb
本来Xcode自带gdb,但后来Xcode的debuger改用lldb所以就没有了gdb了。需要自己安装。下面的网文有安装方法:
http://www.csdn123.com/html/topnews201408/43/8443.htm
该文涉及brew的安装,其方法如下:
curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo tar xvz -C/usr/local --strip 1
三 具体方法
3.1 用“-g”选项重新编新编译模块
使用“-g”选项主要是为了模块带上调试信息。我们只需要使指定模块是debug版的就可以实现断点调试了。换言之无需整个Apache服务器都是debug版。如果是在命令行中,编译debug版模块的方法是:cd 进工程根目录然后输入如下命令
即可编译出带调试信息的模块。实质上CFLAGS是apxs内部使用到的一个编译变量,这里直接将其设置成“-g”了。如果查一下CFLAGS在
在我的机器上,用上面命令查出CFLAGS的内容为空。所以我直接就把编译命令写成“make CFLAGS=-g all”。
而要QT Creator编译出带调试信息的模块方法也很简单,看下面截图就可以知道具体的方法(留意左侧纵向工具条“项目”)
一些建议:这里的构建设置,最好分为debug及release两个版本,以方使日后使用。具体新增设置的方法很简单不冗述。release版的构建设置用
即可。后面所述的部署,运行等设置,我都推荐大家分为debug及release两个版本。
3.2 模块的部署
在命令行上实现的部署分标准的步骤分两步。一是设置httpd.conf,二是运行 make install。这两个操作都会遇到权限问题。为了开发方便,这里介绍的部署方法会和标准有点不一样。这些不一样的地方主要是为了不用老是sudo输密码。
第一步,设置httpd.conf。httpd.conf是Apache的配置文件,我们需要对其进行配置Apache才会在启动时加载我们的模块。在Mac上httpd.conf通常的路径如
上面的命令是在httpd.conf末尾追加一包含语句。被包含的是apache_test_setting.conf这个文件。这个文件是普通用户可读写的。好了我们现在要向apache_test_setting.conf加入具体的设置信息了:
其中“/Users/apple/work/project/helloapache”是我开发代码的工程根目录。第一个设置语句的意思是:启动时加载工程根目录下的mod_helloapache.so文件。或者有人会问:
我们需要把这一句改成如下这样
路径“/usr/libexec/apache2/”是的的机器上,默认的Apache模块安装目录。这里的修改主要是把so库从默认的安装目录中放回工程根目录(该操作是要sudo的)。
第二步,在QT Creator上的设置需要QT Creator获取root权限才能实现。要不然在移动文件时会失败。下面介绍一个以root权限启动QT Creator的方法,看下面shell脚本:
该方法在单步调试时,会再次用到。原因是Apache是以root权限启动的。如果QT Creator是普通权限的话,想调试root权限的Apache根本就权限不足。QT Creator上的设置用截图说明:
是的就设置一个“make install”就OK了。上面这些是release版的部署设置。而debug版的部署设置与release版的基本一样,只是最后要加多一步“dSYM”生成的步骤。dSYM 常见于Mac的开发环境中(例如:Xcode)是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中。apxs默认情况下并不会为我们生成该文件。我们需要自己生成,在Makefile中加入下面的脚本
这个主要用于生成“dSYM”文件,其名为“mod_helloapache.so.dSYM”。在终端执行的部署命令为:
debug版的部署,在QT Creator中的设置方法与release版的方法基本一样,只是命令变成了“make install debug_info”。
3.3 release版模块的运行
在终端中运行release模块的命令如下:
关闭命令
重启命令
在QT Creator中的设置为:
3.4 debug版模块的运行
debug版的运行,与release版的很不一样。
3.4.1 要确认上面提及的“dSYM”文件已经生成了.
如果没有该文件就会生如下图的“Cannot access memory at address 0xe40”问题:
3.4.2 在工程根目录编写.gdbinit文件
该文件会在gdb启动时读入并运行中当的命令。.gdbinit的具体内容如下
"r -X"的作用以参看《Apache Debugging Guide》一文中的说明。
3.4.3 终端调试运行模块
所用的命令如下:
要注意:等命令输出稳定后,输入"Ctrl+c"才能设置断点。
3.4.4 QT Creator调试运行模块
先要设置QT Creator的调试器为gdb(默认为:lldb),用"command+,"打开设置界面,参照下面截图进行设置:
接首要设置工程运行的程序:
如上图,这回设置的不是make了。
请保证以root权限启动QT Creator,点击debug按钮即可调试。当然,我们要向Apache发送请求才会进入我们的断点。发送请求的方法很多,有人直接用浏览器,而我这里用的是比较简单的curl:
到这里我们就可以单步调试了。截图如下:
小结:
本系列文章,关于环境搭建及设置的内容到此结束。下一章将会从一个类似于HelloWorld的程序说起。
一 概述
本文所说的所有的部署,运行及断点调试这些操作都是在本地机器上进行的。而写出来的模块往往是部署并运行在远程的服务器上。所以这里说的都是开发环境的设置,至于测试环境及产生环境,本文内容并不涉及。(开发环境、生产环境、测试环境 的说明:http://my.oschina.net/sancuo/blog/214904)。本文关于断点调试的内容,大家可以看看了如下的文章:
http://httpd.apache.org/dev/debugging.html
《Apache Debugging Guide》
这实质上是Apache官网上的文章。说的就是Apache服务器的调试方法。阅读上面这个文章需要注意一个细微的差异:官网上的文说的是整个Apache服务器(Apache server)的调试方法,而本文所关注的是 Apache模块的调试方法。具体来说,官文调试整体,需要用“-g”选项重新编译整个Apache服务器;本文调试部分,“-g”选项只需要新编译指定的模块即可。(“-g”选项是gcc用于向目标文件加入调试信息的选项)
二 需求描述
2.1 参看上一章《QT Creator 加 apxs 搭建Apache模块开发环境》的第二小节。
本文的环境,需要在上一章的环境基础上再进行添加。所以上一章中所生成的工程可以直接拿来用。
2.2 安装 Command Line Tools
打开终端输入:
xcode-select --install
2.3 安装 gdb
本来Xcode自带gdb,但后来Xcode的debuger改用lldb所以就没有了gdb了。需要自己安装。下面的网文有安装方法:
http://www.csdn123.com/html/topnews201408/43/8443.htm
该文涉及brew的安装,其方法如下:
curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo tar xvz -C/usr/local --strip 1
三 具体方法
3.1 用“-g”选项重新编新编译模块
使用“-g”选项主要是为了模块带上调试信息。我们只需要使指定模块是debug版的就可以实现断点调试了。换言之无需整个Apache服务器都是debug版。如果是在命令行中,编译debug版模块的方法是:cd 进工程根目录然后输入如下命令
make CFLAGS=-g all
即可编译出带调试信息的模块。实质上CFLAGS是apxs内部使用到的一个编译变量,这里直接将其设置成“-g”了。如果查一下CFLAGS在
apxs中的设置信息可以用以下命令:
apxs -q CFLAGS
在我的机器上,用上面命令查出CFLAGS的内容为空。所以我直接就把编译命令写成“make CFLAGS=-g all”。
而要QT Creator编译出带调试信息的模块方法也很简单,看下面截图就可以知道具体的方法(留意左侧纵向工具条“项目”)
一些建议:这里的构建设置,最好分为debug及release两个版本,以方使日后使用。具体新增设置的方法很简单不冗述。release版的构建设置用
make all
即可。后面所述的部署,运行等设置,我都推荐大家分为debug及release两个版本。
3.2 模块的部署
在命令行上实现的部署分标准的步骤分两步。一是设置httpd.conf,二是运行 make install。这两个操作都会遇到权限问题。为了开发方便,这里介绍的部署方法会和标准有点不一样。这些不一样的地方主要是为了不用老是sudo输密码。
第一步,设置httpd.conf。httpd.conf是Apache的配置文件,我们需要对其进行配置Apache才会在启动时加载我们的模块。在Mac上httpd.conf通常的路径如
为:/etc/apache2/httpd.conf。该文件对于普通用户来说是没有写权限的,所以我作了一个变通。在终端执行如下命令:
touch /Users/apple/work/global/apache_test_setting.conf sudo su echo "Include /Users/apple/work/global/apache_test_setting.conf">>/etc/apache2/httpd.conf
上面的命令是在httpd.conf末尾追加一包含语句。被包含的是apache_test_setting.conf这个文件。这个文件是普通用户可读写的。好了我们现在要向apache_test_setting.conf加入具体的设置信息了:
LoadModule helloapache_module /Users/apple/work/project/helloapache/mod_helloapache.so <Location "/helloapache"> Sethandler helloapache </Location>
其中“/Users/apple/work/project/helloapache”是我开发代码的工程根目录。第一个设置语句的意思是:启动时加载工程根目录下的mod_helloapache.so文件。或者有人会问:
通常Apache模块都是放在Modules目录或libexec目录中,你为什么要放在自己的开发目录中呢?这主要是为了在make clean时方便删除。因为调试的模块多起来时会使Modules目录或libexec目录
很零乱,时间一长那些so文件是要删的,那些是不能删的你都搞不清。这个应该在一开始就做好设置,避免日后麻烦。另外,这第一步的设置,无需修改QT Creator.第二步。修改Makefile中下面的脚本
install: install-modules-yes
我们需要把这一句改成如下这样
install: install-modules-yes mv /usr/libexec/apache2/mod_helloapache.so ./
然后,在工程根目录运行
sudo make install
路径“/usr/libexec/apache2/”是的的机器上,默认的Apache模块安装目录。这里的修改主要是把so库从默认的安装目录中放回工程根目录(该操作是要sudo的)。
第二步,在QT Creator上的设置需要QT Creator获取root权限才能实现。要不然在移动文件时会失败。下面介绍一个以root权限启动QT Creator的方法,看下面shell脚本:
$ cd /Applications/Qt\ Creator.app/Contents/MacOS/ $ sudo su # ./Qt\ Creator
该方法在单步调试时,会再次用到。原因是Apache是以root权限启动的。如果QT Creator是普通权限的话,想调试root权限的Apache根本就权限不足。QT Creator上的设置用截图说明:
是的就设置一个“make install”就OK了。上面这些是release版的部署设置。而debug版的部署设置与release版的基本一样,只是最后要加多一步“dSYM”生成的步骤。dSYM 常见于Mac的开发环境中(例如:Xcode)是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中。apxs默认情况下并不会为我们生成该文件。我们需要自己生成,在Makefile中加入下面的脚本
debug_info: dsymutil ./mod_helloapache.so
这个主要用于生成“dSYM”文件,其名为“mod_helloapache.so.dSYM”。在终端执行的部署命令为:
sudo make install debug_info
debug版的部署,在QT Creator中的设置方法与release版的方法基本一样,只是命令变成了“make install debug_info”。
3.3 release版模块的运行
在终端中运行release模块的命令如下:
sudo make start
关闭命令
sudo make stop
重启命令
sudo make stop
在QT Creator中的设置为:
3.4 debug版模块的运行
debug版的运行,与release版的很不一样。
3.4.1 要确认上面提及的“dSYM”文件已经生成了.
如果没有该文件就会生如下图的“Cannot access memory at address 0xe40”问题:
3.4.2 在工程根目录编写.gdbinit文件
该文件会在gdb启动时读入并运行中当的命令。.gdbinit的具体内容如下
#文件名: .gdbinit #gdb启动时会读取当前目录下的该文件,并运行其中的命令 r -X
"r -X"的作用以参看《Apache Debugging Guide》一文中的说明。
3.4.3 终端调试运行模块
所用的命令如下:
sudo gdb httpd
要注意:等命令输出稳定后,输入"Ctrl+c"才能设置断点。
3.4.4 QT Creator调试运行模块
先要设置QT Creator的调试器为gdb(默认为:lldb),用"command+,"打开设置界面,参照下面截图进行设置:
接首要设置工程运行的程序:
如上图,这回设置的不是make了。
请保证以root权限启动QT Creator,点击debug按钮即可调试。当然,我们要向Apache发送请求才会进入我们的断点。发送请求的方法很多,有人直接用浏览器,而我这里用的是比较简单的curl:
curl localhost/helloapache
到这里我们就可以单步调试了。截图如下:
小结:
本系列文章,关于环境搭建及设置的内容到此结束。下一章将会从一个类似于HelloWorld的程序说起。
相关文章推荐
- Apache Maven 入门篇 ( 下 )
- Apache Maven 入门篇 ( 上 )
- Apache配置SSL的过程
- 注册、卸载系统服务
- Linux-CentOS XAMPP Apache配置多端口
- Web性能压力测试工具之ApacheBench(ab)详解
- 使用Apache Bench对网站性能进行测试
- 性能测试-ApacheBench
- Linux下安装LAMP(Apache+PHP+MySql)和禅道
- Apache Commons fileUpload实现文件上传
- Fix iOS 9 App Transport Security Issues In Apache Cordova
- Apache服务器的配置具体操作—— Apache比较强大,所以要配置Apache作为本地web服务器
- apache代理服务器设置
- apache.commons.configuration.PropertiesConfiguration实例
- Centos6.5下安装Apache
- 在Java中利用Apache Commons Codec API实现常见的加密解密算法,如:md5,sha256
- QT Creator 加 apxs 搭建Apache模块开发环境
- Apache的ab工具
- CentOS 6.5系统安装配置LAMP(Apache+PHP5+MySQL)服务器环境
- 关于apache服务器的虚拟目录和虚拟主机的设置