一 概述html
本文所說的全部的部署,運行及斷點調試這些操做都是在本地機器上進行的。而寫出來的模塊每每是部署並運行在遠程的服務器上。因此這裏說的都是開發環境的設置,至於測試環境及產生環境,本文內容並不涉及。(開發環境、生產環境、測試環境 的說明:http://my.oschina.net/sancuo/blog/214904)。本文關於斷點調試的內容,你們能夠看看了以下的文章:git
http://httpd.apache.org/dev/debugging.html
github
《Apache Debugging Guide》
shell
這實質上是Apache官網上的文章。說的就是Apache服務器的調試方法。閱讀上面這個文章須要注意一個細微的差別:官網上的文說的是整個Apache服務器(Apache server)的調試方法,而本文所關注的是 Apache模塊的調試方法。具體來講,官文調試總體,須要用「-g」選項從新編譯整個Apache服務器;本文調試部分,「-g」選項只須要新編譯指定的模塊便可。(「-g」選項是gcc用於向目標文件加入調試信息的選項)
apache
二 需求描述xcode
2.1 參看上一章《QT Creator 加 apxs 搭建Apache模塊開發環境》的第二小節。瀏覽器
本文的環境,須要在上一章的環境基礎上再進行添加。因此上一章中所生成的工程能夠直接拿來用。服務器
2.2 安裝 Command Line Tools
app
打開終端輸入:curl
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的程序提及。