前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#脚本实践(五): 调试器

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

作者头像
逍遥剑客
发布2018-05-23 16:27:17
9100
发布2018-05-23 16:27:17
举报
  • 以前用过lua, 调试时很痛苦. 当然现在已经有比较成熟的调试器了, 比如decoda
  • 在没有调试器之前都是怎么调试的呢?
    • printf打印到控制台之类的输出窗口. 如果做了热更新的话可以边改边看
    • 输入命令, 让控制台显示结果. 对于C++来说控制台是个很不爽的东西, 因为每个指令都要写个解析函数. 而脚本则可以直接把脚本语句当指令敲进去, 比如CsharpRepl
  • 当然, 最理想的情况还是能够下断点, 单步跟踪
  • Unity使用MonoDevelop作为调试器, 幸运的是, MonoDevelop和UnityDebugger插件都是开源的, 所以很容易山寨过来
  • MonoDevelop有两种方式启动调试:
    • 直接执行, 就像VS里按F5一样.
    • 挂接到进程, 就是先启动程序, 然后把调试器挂上去. 这种对于脚本来说比较实用, 因为可以修改一下继续调试, 不用重新启动游戏
  • Mono调试时是有个调试服务器的, 可以通过socket连接客户端与服务器. 如果从MD里启动, 则MD是调试服务器. 如果是Attach方式, 则游戏是那个server.
  • 以Attach方式为例:  
  • int port = (int)(56000 + (GetCurrentProcessId() % 1000));  
  • char options255;  
  •  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"开头的进程:

  • 另外需要注意的是, 调试的DLL必须有mdb文件, 相当于pdb文件. MD默认是生成pdb文件的, 所以需要改成mdb的调试信息才可以.
  • 之后就一切顺利了, 断点, 单步跟踪, 监视器什么的都很完美:

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011年12月04日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档