专栏首页逍遥剑客的游戏开发C#脚本实践(五): 调试器

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

  • 以前用过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 条评论
登录 后参与评论

相关文章

  • GameEngineArchitecture读书笔记(三)

    逍遥剑客
  • Nebula3学习笔记(6): IO实战, ZIP解压缩程序

    逍遥剑客
  • VR下双手与物体的交互

    逍遥剑客
  • Power of Three

    Tyan
  • 关于Go语言在服务端做Restful接口和socket通信

    关于REST的定义,我就不扯了~ 大家可以看我以前的博文。 下图即是REST的架构图: ? 当REST架构的约束条件作为一个整体应用时,将生成一个可以扩展到大量...

    李海彬
  • GitLab使用

    用户1733354
  • Pony:新技术在两个产业跨界部分,往往最有机会诞生创新

    7月19日,在红杉资本沈南鹏联手香港学者及科技界十余位资深专家共同发起的“香港X科技创业平台暨青年创业服务系统”大会上,腾讯董事会主席兼CEO马化腾围绕创业向香...

    腾讯高校合作
  • 手撕RTSP协议系列(6)——SETUP

    SETUP请求的作用是指明媒体流该以什么方式传输;每个流PLAY之前必须执行SETUP操作;发送SETUP请求时,客户端会指定两个端口,一个端口用于接收RTP数...

    视界音你而不同
  • 数据架构师成长思考总结

    Structured:建立中心(问题、目标)。以中心的核心要素对中心进行分解,形成分类子结构。以一定的范式、流程顺序进行分类子结构的合理分类、减少非关键分类结构...

    快乐的技术人
  • java注解入门(含源码下载)

    用户1737026

扫码关注云+社区

领取腾讯云代金券