新的游戏引擎对代码调试提供了全方位支持。引擎的优化之初即充分考虑了开发者的友好性,提供了完整的调试信息,便于开发人员快速定位问题,包括在运行时检查对象状态、单步跟踪代码、可在浏览器中设置断点等。支持调试的开发语言包括 C# 和 C/C++ 。
幸运的是,我们可以利用 .NET 提供的 Debug Proxy 来实现同时与浏览器和其中的 .NET 运行时的对接。
对于需要进行调试的 Web 应用程序,我们不仅需要一个 Server 端口来托管应用文件,还需要使其运行在一个开放了 Debugging 端口的特殊的浏览器当中。Debug Proxy 通过 Debugging port 来控制这个调试中的浏览器,同时开放 Proxy 端口供用户访问。
也就是说,至少需要一个特殊的 Debugging 浏览器,和一个支持控制 Debug Proxy 的浏览器或者 IDE,才能在浏览器中进行 C# 源码调试。
建立浏览器中的 C# 调试环境正常来说会比较繁琐,我们在团结引擎中提供了相应的工具,简化了这一流程。
首先在构建程序时,需要勾选小游戏构建配置文件 Inspector 中的 Development Build 选项。
随后在 Build Settings 右下角或者在菜单栏 File 选项中,点击运行 Build And Run (Ctrl/Command + B)。
构建完成后,Editor 会自行启动用来托管应用的 WebServer ,一个正常的浏览器网页会弹出,展示并运行构建后的程序。同时,Editor 当中也会通过 Info Log 提示 WebServer 的进程 ID 和程序的访问网址。
若要进行 C# 代码调试,请忽略或关闭上面这个网页,因为它并不是调试用的特殊浏览器,我们需要通过命令行来启动调试环境。
Editor 支持自动根据用户环境生成调试环境启动命令的功能(用户需要提前安装 Edge/Chrome),可以帮助用户避免编写繁琐的调试环境启动命令。这项功能目前仅支持 Windows 环境,Linux/MacOS 后续也会支持
若用户电脑符合条件,自动生成的启动命令会在 WebServer 启动时一起在 Info Log 中显示。用户需要复制提示中的启动命令,打开命令行或者终端执行。
执行上述命令之后,会有类似下图的两个浏览器被打开,在图示当中,左侧是一个正常的浏览器,用来打开 devtools,右侧是开放了 Debugging port 的特殊浏览器。
用户需要继续访问和图示中相同的 devtoolsFrontendUrl,以访问 devtools 进行调试。通过 devtoolsFrontendUrl 进入调试界面后,就可以在浏览器中调试 C# 代码。设置及控制程序执行流经过断点,程序和预期一样会被暂停。需要注意将两个浏览器同时保持在活跃状态。
浏览器中对 C/C++ 源码进行调试,并不是 Browser .NET Backend 程序的专属功能,它通过 Chrome 的浏览器插件实现,理论上也适用于其他由 C/C++ 导出的 WebAssembly 程序。以下是一则使用示例:
如果需要在浏览器中对程序的 C/C++ 代码或者依赖库进行调试,首先需要在 Chrome 内核的浏览器中安装 C/C++ DevTools Support (DWARF) 插件。
为了使插件正常工作,用户需要检查浏览器是否开启了 DWARF support 的试验特性,Ctrl/Command + Shift + I (或者在浏览器更多选项中)打开开发者工具。
根据图示找到开发者工具的设置选项,在 Experiments 功能中确保 WebAssembly Debugging: Enable DWARF support
选项已经打开。可能需要重新启动浏览器从而使该插件生效。
插件正常运作的情况下,可以在开发者工具的控制台输出当中留意到下图中的两个插件的提示输出。
为了让 C/C++ 源码可以被 DWARF 调试工具定位到,用户需要确保引用的 C/C++ 依赖支持 Debug,且 .pdb 文件没有丢失。同时在 Editor 中进行构建时,需要勾选 Development Build 选项。
在此之后,可以在开发者工具台 Source 工具的 top/file:// 路径下找到 C/C++ 源码,可以设置断点进行调试。