Windows環境下對Apache進行原始碼級跟蹤調試

來源:互聯網
上載者:User
Wind ows 環境下對 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瀏覽器地址欄中輸入” http://localhost/”,如果前面的步驟都正確,這時程式會在你設定斷點的地方停下來(第一次時間比較長,系統需要載入一些調試資訊)。這時你就可以跟隨斷點輕鬆瞭解Apache是如何處理http請求訊息,進而瞭解Apache的核心及工作原理。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.