學習遊戲服務器開發必看,C++遊戲服務器開發經常使用工具介紹

C++遊戲服務器開發經常使用工具介紹



在軟件開發過程當中須要使用的工具類型實屬衆多,從需求建模到軟件測試,從代碼編譯到工程管理,這些工具都對項目有着不可替代的做用。莊子有云,「吾生也有涯,而知也無涯,以有涯隨無涯,殆已」。代入到項目開發中就是說,若是對知識點無差異的全面攻擊,不只會致使所學甚泛卻無一深刻的尷尬,也會佔用太多的有效時間從而影響項目進度。做爲一個C++遊戲服務器開發者來講,咱們時刻肩負着線上遊戲開發和維護任務,能夠優先學習對本身工做最經常使用且最重要的,解決實際問題最爲緊迫。本文對一些經常使用工具給出了介紹和指引,包括調試器、內存泄露檢查工具、代碼覆蓋工具、抓包工具、性能分析工具、靜態代碼檢查工具、high cpu分析工具以及Lua腳本開發工具,旨在幫助經驗不足的C++服務器開發工程師解決代碼問題和提高代碼質量,從而提高本身和團隊的工做效率。html


  1. 調試器

一般,調試(debugging)是指發現缺陷並改正的過程。若是代碼中存在缺陷,咱們首先要識別形成缺陷的根本緣由(root cause),這個過程就稱做調試。找到根本緣由後,就能夠修正缺陷。在軟件開發週期中,調試並修正缺陷的時間可能遠多於寫代碼的時間,有駕輕就熟的工具能夠節省調試時間無疑是很是重要的。前端

  • 在linux下通常使用 GDB(GNU symbolic debugger)進行調試,它是一個受通用公共許可證即GPL保護的自由軟件,能夠調試多種語言。 
    java

    • 用法參考:http://www.gnu.org/software/gdb/python

    • 下載地址:http://ftp.gnu.org/gnu/gdb/linux

  • 對GDB有必定了解的人會發現,GDB對STL的調試比較困難,這裏推薦一個GNU提供的調試工具 ,使用python實現,支持C++11特性。 
    c++

    • 用法參考:http://sourceware.org/gdb/wiki/STLSupportgit

    • 下載地址:svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/pythongithub

  • 同時你可使用一些前端工具如XXGDB,DDD等。它們都有圖形化界面,所以使用更方便。也可使用WinGdb,利用Visual Studio的IDE進行Linux遠程調試。 
    windows

    • 下載地址:http://www.wingdb.com/數組

  • 另外,若是你再程序中發現了和系統調用相關的問題,使用strace能夠快速定位。strace可以跟蹤進程執行時的系統調用和所接收的信號,並將相關調用信息放在輸出流中。 

    • 下載地址:http://sourceforge.net/projects/strace/

  • 在windows下通常使用 Visual Studio自帶的調試工具,除此之外,也推薦使用WinDbg,它是微軟發佈的一款至關優秀的源碼級(source-level)調試工具,能夠用於Kernel模式調試和用戶模式調試,還能夠調試Dump文件。 

    • 用法參考:http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx

    • 下載地址:http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx


2.內存泄露檢查工具


內存泄漏(memory leak)是不少C++代碼中比較容易出現的問題。內存泄漏也稱做「存儲滲漏」,意思是說當你用動態存儲分配函數動態開闢了一塊內存空間,在使用完畢後忘記了釋放,致使這塊空間在進程結束之前都再也不可用。偶爾發生的內存泄漏可能並不嚴重,可是如下狀況會致使嚴重的系統故障: 
1)程序運行後置之不理,而且隨着時間的流失消耗愈來愈多的內存; 
2)程序可以請求未被釋放的內存(好比共享內存),甚至是在程序終止的時候; 
3)泄漏在發生在操做系統內部或者系統關鍵驅動中; 
4)內存很是有限,好比在嵌入式系統或便攜設備中; 
咱們可使用內存泄露檢查工具在測試環境下監視進程的運行並獲取詳細測試報告,而後對有內存泄漏的代碼段各個擊破,從而規避嚴重故障的風險。

  • 在Linux環境下推薦使用valgrind,它是一款用來定位c/c++程序中內存相關錯誤的工具集,功能包括內存泄漏、使用未初始化的內存、讀/寫已釋放的內存、讀/寫內存越界等 

    • 用法參考: http://valgrind.org/docs/manual/manual.html

    • 下載地址:http://valgrind.org/downloads/current.html

  • Windows Leaks Detector是下專門用於解決windows環境下內存泄漏的工具,基於Win API調用鉤子實現,可以探測任何Win32應用程序中的資源泄漏(內存,句柄等)。

    • 用法參考:http://winleak.sourceforge.net/

    • 下載地址:http://sourceforge.net/projects/winleak/

  • 若是你安裝了WinDbg, umdh工具也會被附帶安裝,和windbg.exe在同一級目錄下。輕量級的umdh也能夠用於定位內存泄露,使用起來很是簡單。 

    • 用法參考:https://msdn.microsoft.com/en-us/library/windows/hardware/ff558947(v=vs.85).aspx


3.代碼覆蓋工具

代碼覆蓋率(code coverage rate)是反映測試用例對被測軟件覆蓋程度的重要指標,也是衡量測試工做進展狀況的重要指標。在代碼邏輯比較複雜的狀況下,測試工做每每只能覆蓋到顯而易見的邏輯分支,而更多的深層次的邏輯分支則不容易被測試人員發現。爲了保證測試的覆蓋率,有些開發人員會嘗試協助測試人員寫出全部的測試用例,這不只會犧牲大量的寶貴的開發時間,同時也擁有必定的難度,最重要緣由就是由於測試難以量化。而代碼覆蓋工具就是用來量化代碼測試的覆蓋率,讓測試人員能夠直觀的發現那些沒有覆蓋到的代碼分支。

  • 在Linux環境下推薦使用gcov,這是一個命令行控制檯程序,隨gcc一同發佈,一般在/usr/bin/gcov路徑下能夠找到。 

    • 用法參考:https://gcc.gnu.org/onlinedocs/gcc/Gcov.html

  • 在windows環境下推薦使用OpenCppCoverage,代碼開源而且使用簡單,只要有保留有pdb文件便可在運行時插樁進行測試,導出結果是一個有顏色標記的源碼拷貝,對開發者來講至關直觀。 

    • 用法參考:https://opencppcoverage.codeplex.com/documentation

    • 下載地址: https://opencppcoverage.codeplex.com/


4.性能分析工具

軟件的性能是軟件質量的重要考察點,不管是服務端仍是客戶端程序,性能都是用戶體驗的關鍵,主要包括性能表現和穩定性兩個方面。解決性能問題最基本的方法是開發者對代碼進行review,同時也可使用工具對代碼進行性能分析(profiling)。

  • 在Linux環境下推薦使用gprof,它是gnu binutils工具之一,默認狀況下Linux系統中都帶有這個工具,它可以精確地給出函數被調用的時間和次數和函數調用關係。 

    • 用法參考: http://www.cs.utah.edu/dept/old/texinfo/as/gprof_toc.html

  • 在windows環境下可使用visual studio自帶的profiling工具,工具的界面入口 Config Properties -> Linker -> Advanced -> Profile,可是須要visual studio2008以上版本。若是你使用的是更早的版本,可使用C++ Profiler。 

    • 下載地址:http://www.semdesigns.com/Products/Profilers/CppProfiler.html

  • 另外一款很有口碑的軟件是AQTime,它可以收集程序運行時關鍵的性能信息和內存/資源分配信息,並提交概要報告和詳細報告,還提供全部的程序優化處理工具,囊括了自定義過濾器、圖形化的調用層次結構一直到源代碼瀏覽等內容,是完整的性能和調試工具集,功能很是強大。 

    • 用法參考:http://www.codework-solutions.com/testing-tools/aqtime-java-profiling/

    • 下載地址: http://www.automatedqa.com/products/aqtime/index.asp


5.網絡抓包工具

抓包(packet capture)就是將網絡傳輸發送與接收的數據包進行截獲、重發、編輯、轉存等操做,也用來檢查網絡安全,也常常被用來進行數據截取等。在項目開發過程當中,特別是B/S或C/S模型的項目中,服務器和客戶端中間的交互相關問題很難定位,須要額外看懂不少源碼,而且調試起來至關費時。網絡抓包工具的設計目的就在於此,對於協議次數、協議順序、協議內容是否都與編碼和設計的預期一致這類問題,能夠直接獲取到二進制的tcp或者udp流的內容並導出到文本,方便開發者解決複雜交互問題。

  • 在Linux環境下最常使用的是Tcpdump,它能夠將網絡中傳送的數據包的「頭」徹底截獲下來提供分析,支持針對網絡層、協議、主機、網絡或端口的過濾,並提供and、or、not等邏輯語句來幫助你去掉無用的信息。 

    • 用法參考:http://www.tcpdump.org/

    • 下載地址: http://www.tcpdump.org/#latest-release

  • 在windows下最經常使用的是wireshark,它使用WinPCAP做爲接口,直接與網卡進行數據報文交換,一樣具備語法過濾功能。 

    • 用法參考:https://www.wireshark.org/#learnWS

    • 下載地址:https://www.wireshark.org/#download


6.靜態代碼檢查工具

靜態代碼檢查(static code check)是指使用自動化工具軟件對程序源代碼進行檢查,以分析程序行爲的技術,應用於程序的正確性檢查、安全缺陷檢測、程序優化等。靜態代碼檢查承諾無需開發人員費勁就能找出代碼中已有的缺陷。固然,這些承諾並非必定能兌現。儘管如此,好的靜態分析工具仍然是工具箱中的無價之寶,由於它能夠不須要運行就能夠幫助你檢查代碼中的潛在風險。

  • 在Linux環境下推薦使用cppcheck,它做爲編譯器的一種補充檢查,cppcheck對產品的源代碼執行嚴格的邏輯檢查,包括自動變量檢查、數組的邊界檢查、class類檢查、過時的函數調用檢查、異常內存使用、釋放檢查、內存泄漏檢查、操做系統資源釋放檢查、異常STL函數使用檢查、代碼格式錯誤、性能因素檢查這些類型,覆蓋範圍很是全面。 

    • 用法參考:http://sourceforge.net/p/cppcheck/wiki/Home/

    • 下載地址:http://cppcheck.sourceforge.net/

  • 在windows環境下可使用PC-Lint,功能可媲美cppcheck。 

    • 下載地址:http://www.gimpel.com/html/pcl.htm

  • 因爲PC-Lint是商業化的軟件,不便於你們學習和使用,可是若是你只須要使用C語言進行開發,可使用開源程序靜態分析工具splint。 

    • 下載地址:http://www.splint.org/

  • 另外,介紹一個Google使用的C++代碼規範檢查工具Cpplint。若是你當前也使用Google C++代碼規範,那麼你頗有必要使用Cpplint,它是一個python腳本,使用簡單的命令便可校驗你的代碼書寫是否符合規範。它支持linux和windows兩種環境,並能夠嵌入visual studio。 

    • 下載地址:https://github.com/google/styleguide


7.High CPU監控工具

High CPU監控工具能夠用於監控和定位CPU佔用比較高的進程和線程,獲取當時的堆棧信息來定位代碼段,相比profiling工具更加直觀。

  • ProcDump是一個監視 CPU峯值命令行工具,適用於windows環境,以attach的方式進行使用,當達到預設的CPU峯值時會生成當時的轉儲文件。 ProcDump還能夠對懸窗(hung window)和未處理的異常(unhandled exception)進行監控,並能夠基於系統性能計數器的值轉儲。它也可做爲通常進程轉儲實用工具,能夠在其餘腳本(好比python)中嵌入。 

    • 下載地址:https://technet.microsoft.com/en-us/sysinternals/bb896653/

  • Windows環境下另外一個推薦使用的工具是process explorer,它是由Sysinternals開發的Windows系統和應用程序監視工具,不只結合了Filemon(文件監視器)和Regmon(註冊表監視器)兩個工具的功能,還增長了多項重要的加強功能。包括穩定性和性能改進、強大的過濾選項、修正的進程樹對話框(增長了進程存活時間圖表)、可根據點擊位置變換的右擊菜單過濾條目、集成帶源代碼存儲的堆棧跟蹤對話框、更快的堆棧跟蹤、可在 64位 Windows 上加載 32位 日誌文件的能力、監視映像(DLL和內核模式驅動程序)加載、系統引導時記錄全部操做等。 

    • 用法參考:http://www.howtogeek.com/school/sysinternals-pro/lesson3/all/

    • 下載地址:https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

  • Linux環境下沒有發現整合好的對應工具,但可使用pstack導出線程堆棧,爲了輔助pstack捕獲進程和cpu相關信息,還須要top、atop、pidstat、ps、pstree這類命令來監控定位High CPU進程,最終達到的效果與windows下面的兩款工具是一致的。 

    • 用法參考:https://docs.oracle.com/cd/E19683-01/816-0210/6m6nb7mih/index.html

    • 下載地址:https://packages.debian.org/sid/pstack


8. Lua腳本開發工具

Lua腳本是一種與C/C++結合很是緊密的動態語言,自身就是由C代碼實現的。因爲它簡單而又高效的特性,當前已經成功運用於各種行業軟件中,在遊戲開發領域更是有着其不可撼動的地位。做爲遊戲開發者,擁有一套高效易用的lua開發環境也一樣重要。

  • 因爲Lua語法相對簡單,不少編輯工具都可以爲Lua提供語法高亮或者語法跳轉功能,鮮有調試功能,調試Lua僅限於加入print函數從新運行,調試效率很是低。因此推薦使用Lua Studio,適用於windows環境,IDE自己帶有代碼美觀的功能,能夠動態地以attach形式附着到任何進程中進行調試,而且自帶腳本熱點函數性能分析工具,功能比較全面。 

    • 下載地址:http://www.luastudio.net/

  • 在Linux環境下可使用Eclipse LDT,仍然具備調試功能。 

    • 下載地址:http://www.eclipse.org/ldt/

  • lua的靜態檢查工具只有Lua-Checker,可是對lua的寫法有特殊要求,依賴bison且須要手動編譯。

    • 下載地址:https://code.google.com/p/lua-checker/

  • 若是隻是使用簡單的Lua 語法檢查,則可使用lua自帶的luac工具,命令以下: 

    • luac -p *.lua

  • 若是要對lua進行打包操做,則使用以下命令: 

    • luac -o lua.o *.lua

  • 若是須要使用各類網絡庫,可使用luarocks , 使用方法相似於python 的pip/ez-install。 

    • 下載地址:https://luarocks.org/

    • 迷茫是正常的,不怕學不會就怕不想學,你們能夠加個人二千人羣 487790381,天天直播課分享,實戰項目教學,學習規範的代碼風格,

相關文章
相關標籤/搜索