新的游戏引擎对代码调试提供了全方位支持。引擎的优化之初即充分考虑了开发者的友好性,提供了完整的调试信息,便于开发人员快速定位问题,包括在运行时检查对象状态、单步跟踪代码、可在浏览器中设置断点等。支持调试的开发语言包括C#和C/C++。
当在本地进行调试时,我们可以比较容易地使用IDE自带的Debugger与正在运行的程序建立连接,因为Debugger和程序运行在同一台计算机上,这时我们可以通过与.NET运行时交互来进行C#代码的调试。
当程序运行在浏览器中时,情况会变的稍微有些不同,我们需要连接和控制的是一个运行在浏览器网页中的.NET运行时。我们无法直接与浏览器中的程序建立连接,因为这额外涉及到与浏览器的交互。
幸运的是,我们可以利用.NET提供的Debug Proxy来实现同时与浏览器和其中的.NET运行时的对接。
对于需要进行调试的Web应用程序,我们不仅需要一个Server端口来托管应用文件,还需要使其运行在一个开放了Debugging端口的特殊的浏览器当中。Debug Proxy通过Debugging port来控制这个调试中的浏览器,同时开放Proxy端口供用户访问。
也就是说,至少需要一个特殊的Debugging浏览器,和一个支持控制 Debug Proxy的浏览器或者IDE,才能在浏览器中进行C#源码调试。
建立浏览器中的C#调试环境正常来说会比较繁琐,我们在团结引擎中提供了相应的工具,简化了这一流程。下面是一则使用示例:
首先在构建程序时,需要勾选Development Build选项。
随后在Build Setting右下角或者在菜单栏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++源码,可以设置断点进行调试。