分享

C#脚本实践(五): 调试器

 quasiceo 2012-12-17

C#脚本实践(五): 调试器

分类: 引擎研究 1139人阅读 评论(5) 收藏 举报
  • 以前用过lua, 调试时很痛苦. 当然现在已经有比较成熟的调试器了, 比如decoda
  • 在没有调试器之前都是怎么调试的呢?
    • printf打印到控制台之类的输出窗口. 如果做了热更新的话可以边改边看
    • 输入命令, 让控制台显示结果. 对于C++来说控制台是个很不爽的东西, 因为每个指令都要写个解析函数. 而脚本则可以直接把脚本语句当指令敲进去, 比如CsharpRepl
  • 当然, 最理想的情况还是能够下断点, 单步跟踪
  • Unity使用MonoDevelop作为调试器, 幸运的是, MonoDevelop和UnityDebugger插件都是开源的, 所以很容易山寨过来
  • MonoDevelop有两种方式启动调试:
    • 直接执行, 就像VS里按F5一样.
    • 挂接到进程, 就是先启动程序, 然后把调试器挂上去. 这种对于脚本来说比较实用, 因为可以修改一下继续调试, 不用重新启动游戏
  • Mono调试时是有个调试服务器的, 可以通过socket连接客户端与服务器. 如果从MD里启动, 则MD是调试服务器. 如果是Attach方式, 则游戏是那个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插件, 当然它只认"unity"开头的进程:
  • 另外需要注意的是, 调试的DLL必须有mdb文件, 相当于pdb文件. MD默认是生成pdb文件的, 所以需要改成mdb的调试信息才可以.
  • 之后就一切顺利了, 断点, 单步跟踪, 监视器什么的都很完美:

C#脚本实践(四): 反射与序列化

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多