分類:
引擎研究
2011-12-04 20:49
1139人閱讀
收藏
舉報
- 以前用過lua, 調(diào)試時很痛苦. 當然現(xiàn)在已經(jīng)有比較成熟的調(diào)試器了, 比如decoda
- 在沒有調(diào)試器之前都是怎么調(diào)試的呢?
- printf打印到控制臺之類的輸出窗口. 如果做了熱更新的話可以邊改邊看
- 輸入命令, 讓控制臺顯示結(jié)果. 對于C++來說控制臺是個很不爽的東西, 因為每個指令都要寫個解析函數(shù). 而腳本則可以直接把腳本語句當指令敲進去, 比如CsharpRepl
- 當然, 最理想的情況還是能夠下斷點, 單步跟蹤
- Unity使用MonoDevelop作為調(diào)試器, 幸運的是, MonoDevelop和UnityDebugger插件都是開源的, 所以很容易山寨過來
- MonoDevelop有兩種方式啟動調(diào)試:
- 直接執(zhí)行, 就像VS里按F5一樣.
- 掛接到進程, 就是先啟動程序, 然后把調(diào)試器掛上去. 這種對于腳本來說比較實用, 因為可以修改一下繼續(xù)調(diào)試, 不用重新啟動游戲
- Mono調(diào)試時是有個調(diào)試服務器的, 可以通過socket連接客戶端與服務器. 如果從MD里啟動, 則MD是調(diào)試服務器. 如果是Attach方式, 則游戲是那個server.
- 以Attach方式為例:
- int port = (int)(56000 + (GetCurrentProcessId() % 1000));
- char options[255];
- sprintf_s(options, 255, "--debugger-agent=transport=dt_socket,address=127.0.0.1:%d,server=y", port);
- char* args = options;
- mono_jit_parse_options (1, &args);
- mono_debug_init (MONO_DEBUG_FORMAT_MONO);
- MD那邊可以直接使用Unity的debugger插件, 當然它只認"unity"開頭的進程:
 - 另外需要注意的是, 調(diào)試的DLL必須有mdb文件, 相當于pdb文件. MD默認是生成pdb文件的, 所以需要改成mdb的調(diào)試信息才可以.
- 之后就一切順利了, 斷點, 單步跟蹤, 監(jiān)視器什么的都很完美:

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