用QT Creator部署,運行及斷點調試Apache的C/C++模塊

一 概述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的程序提及。

相關文章
相關標籤/搜索