天天看點

VS2010 C++下編譯調試MongoDB“.NET研究”源碼

  考慮到mongodb使用了boost庫源碼,參考mongodb官方文檔後,下載下傳編譯boost版本是1.42(時間為2010-2-2)或更新版本:

  boost版本1.42:

  http://sourceforge.net/projects/boost/files/boost/1.42.0/boost_1_42_0.zip/download      

  下載下傳boost源碼之後,我把boost解壓在D盤。

  1.在D:\boost_1_42_0\下找到該批處理檔案bootstrap.bat,以vs2010指令行方式運作它,并最終生成bjam.exe可執行檔案(詳細結果及錯誤資訊見生成的bjam.log日志)。     

  2.将生成的bjam.exe檔案拷貝到“D:\boost_1_42_0”目錄下,運作下面指令行:

bjam stage variant=debug  --stagedir=上海網站建設"上海闵行企業網站制作>d:\boost_1_42_0" --with-filesystem --with-thread --with-date_time --with-program_options --layout=versioned threading=multi toolset=msvc-10.0      

如下圖:   

VS2010 C++下編譯調試MongoDB“.NET研究”源碼

  注:i.如果要生成release連結庫檔案,需将上面的variant設定成release,形如:

      bjam stage variant=release .....     

        ii.如果要全部生成使用下面編譯選項

      bjam ......  --build-type=complete

  編譯過程可能會用一些時間,最終會在"D:\boost_1_42_0" 生成一個lib目錄,裡面包括剛生成的庫檔案。

  3.下載下傳已用vs2010編譯的SpiderMonkey庫檔案及源碼包,并将其解壓到D盤下,下載下傳連結:

  https://github.com/dwight/vc2010_js

  将該檔案夾名稱改為“js”(因為mo​​上海企業網站制作​​ngodb項目會預設指定該路徑尋找可用的lib及c源檔案),如下圖:    

VS2010 C++下編譯調試MongoDB“.NET研究”源碼

  說明:SpiderMonkey是由C語言操作的JavaScript引擎,它支援JS1.4和ECMAScript-262規範。該引擎分析、編譯和執行腳本,根據JS資料類型和對象的需要進行記憶體配置設定及釋放操作。目前它是Mozilla項目的一部分。可通過下面連結了解更多資訊:

  https://develo​​上海徐彙企業網站制作​​per.mozilla.org/en/SpiderMonkey

  源碼下載下傳連結:

  https://developer.mozilla.org/En/SpiderMonkey/Getting_SpiderMonkey_source_code

  另外如何使用spidermonkey參見:

  http://www.ibm.com/developerworks/cn/linux/shell/js/js_engine/  

  4.接下來下載下傳并解壓mongod源碼包(本人下載下傳的是其最新版本:r1.8.0-rc1),這裡我将其也解壓在了D盤:     

  mongodb-src-r1.8.0-rc1:

  https://github.com/mongodb/mongo/zipball/r1.8.0-rc1  

  之後利用vs2010打開 D:\mongodb-mongo-4d2aeb6\db目錄下的解決方案檔案“db_10.sln”, 加載之後的視圖如下:   

VS2010 C++下編譯調試MongoDB“.NET研究”源碼

  在其中的mongod項目上,點選滑鼠右鍵,打開"屬性"對話框, 在“配置屬性”-“c++目錄”-"包含目錄"中點“編輯”:   

VS2010 C++下編譯調試MongoDB“.NET研究”源碼

  添加對上面的boost源碼檔案路徑的包含:   

VS2010 C++下編譯調試MongoDB“.NET研究”源碼

  設定庫檔案目錄選項中添加對剛編譯的boost庫的路徑"D:\boost_1_42_0\lib"聲明,如下圖:       

VS2010 C++下編譯調試MongoDB“.NET研究”源碼
VS2010 C++下編譯調試MongoDB“.NET研究”源碼

  在C/C++正常--“附加包含目錄”,中添加"D:\boost_1_42_0"聲明,如下圖:

VS2010 C++下編譯調試MongoDB“.NET研究”源碼

  5.因為我的機器是32位系統,而下載下傳的mongodb項目設定為64位,是以要修改一下編譯方式,如下圖:     上海闵行企業網站設計與制作 src="http://daizhj.c​​上海企業網站設計與制作​​nblogs.com/images/cnblogs_com/daizhj/mongodebug8.png" alt="" width="604" height="350" /> 一切就緒後,開始編譯,時間比較長,耐心等待...    

  注:如出現“pch.h檔案無法打開”的錯誤資訊時,隻要在VS2010中的開該檔案即可。

  6.如果要調試的話,打開“項目屬性”--“配置屬性”--“調試”--“指令參數”,輸入如下參數  :

  "--dbpath d:\mongodb\db" "--port 27017"

VS2010 C++下編譯調試MongoDB“.NET研究”源碼

  然後找出db.cpp檔案,将斷點放在如下函數的第一行代碼處:

  int main(int argc, char* argv[])

  如下圖:

  需要說明的是,我一開始使用的是VS2008,但mongodb源碼在最新版本中好像就不再提供vs2008的項目檔案了,另外我使用vs2008也一直沒有成功編譯過mongodb,不是缺檔案就是連結庫編譯時有問題(google一下,發現國外同行也被類似問題困擾)。是以大家也就不要再VS2008編譯上浪費時間了。

  好了,到這裡主要的内容介紹完了,大家可以通過調試來分析觀察MONGODB代碼的執行流程了。