电竞比分网-中国电竞赛事及体育赛事平台

分享

C#腳本實(shí)踐(五): 調(diào)試器

 quasiceo 2012-12-17

C#腳本實(shí)踐(五): 調(diào)試器

分類: 引擎研究 1139人閱讀 評(píng)論(5) 收藏 舉報(bào)
  • 以前用過lua, 調(diào)試時(shí)很痛苦. 當(dāng)然現(xiàn)在已經(jīng)有比較成熟的調(diào)試器了, 比如decoda
  • 在沒有調(diào)試器之前都是怎么調(diào)試的呢?
    • printf打印到控制臺(tái)之類的輸出窗口. 如果做了熱更新的話可以邊改邊看
    • 輸入命令, 讓控制臺(tái)顯示結(jié)果. 對(duì)于C++來說控制臺(tái)是個(gè)很不爽的東西, 因?yàn)槊總€(gè)指令都要寫個(gè)解析函數(shù). 而腳本則可以直接把腳本語句當(dāng)指令敲進(jìn)去, 比如CsharpRepl
  • 當(dāng)然, 最理想的情況還是能夠下斷點(diǎn), 單步跟蹤
  • Unity使用MonoDevelop作為調(diào)試器, 幸運(yùn)的是, MonoDevelop和UnityDebugger插件都是開源的, 所以很容易山寨過來
  • MonoDevelop有兩種方式啟動(dòng)調(diào)試:
    • 直接執(zhí)行, 就像VS里按F5一樣.
    • 掛接到進(jìn)程, 就是先啟動(dòng)程序, 然后把調(diào)試器掛上去. 這種對(duì)于腳本來說比較實(shí)用, 因?yàn)榭梢孕薷囊幌吕^續(xù)調(diào)試, 不用重新啟動(dòng)游戲
  • Mono調(diào)試時(shí)是有個(gè)調(diào)試服務(wù)器的, 可以通過socket連接客戶端與服務(wù)器. 如果從MD里啟動(dòng), 則MD是調(diào)試服務(wù)器. 如果是Attach方式, 則游戲是那個(gè)server.
  • 以Attach方式為例: 
    1.  int port = (int)(56000 + (GetCurrentProcessId() % 1000));  
    2.  char options[255];  
    3.  sprintf_s(options, 255, "--debugger-agent=transport=dt_socket,address=127.0.0.1:%d,server=y", port);  
    4.  char* args = options;  
    5.  mono_jit_parse_options (1, &args);  
    6.  mono_debug_init (MONO_DEBUG_FORMAT_MONO);  

  • MD那邊可以直接使用Unity的debugger插件, 當(dāng)然它只認(rèn)"unity"開頭的進(jìn)程:
  • 另外需要注意的是, 調(diào)試的DLL必須有mdb文件, 相當(dāng)于pdb文件. MD默認(rèn)是生成pdb文件的, 所以需要改成mdb的調(diào)試信息才可以.
  • 之后就一切順利了, 斷點(diǎn), 單步跟蹤, 監(jiān)視器什么的都很完美:

C#腳本實(shí)踐(四): 反射與序列化

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多