Unity 项目断点调试
文章目录
介绍
项目使用的是 Unity 5.3,现在依然需要维护。项目使用 C# + Lua 开发,但是现有工具无法调试。
环境
- Windows 10 21H2
- Unity 5.3.8f2
- xLua v2.1.6
C#
因为平时比较喜欢使用 Rider,因此选择使用 Rider 进行 C# 调试。
使用 Rider 2020.3 与 Rider 2021.3 都无法进行断点调试。需要尝试使用 Unity 5.3 发布时对应的 Rider 版本,Rider 最早版本是 2017.1。考虑到稳定性,尝试使用 Rider 2017.3,安装后断点调试成功。
在 Unity 中配置 Rider 为编辑器后打开工程,Rider 会自动安装 Unity 插件,再切换回 Unity 就可以使用了。
Lua
修复问题
按照 EmmyLua 文档配置调试后发现无法断点,但是使用 dbg.breakHere()
却可以断点。
在断点后发现调用堆栈中的信息是 Lua.Lua.UI.Example::307
,而不像其他可以断点调试的项目中的路径 Lua/UI/Example.lua.txt::351
,因此怀疑是路径导致无法断点调试,将路径修改为 Lua 文件的相对路径(包含扩展名)后,就可以正确调试了。
后续在 EmmyLua 官方文档下面的评论中找到了另一个回答,也是相同的问题,在打印断点时的路径时发现了问题。
- Remote Debug 远程调试 — EmmyLua for IntelliJ IDEA 1.3.2 documentation
- 关于Lua无法调试总结。 - Cocos2d-x - Cocos中文社区
方案总结
为了支持正确调试 Lua,必须将 xLua 加载的 Lua 文件路径设置为正确的相对路径,即必须可以通过路径访问到文件:
- 必须是相对路径。
- 必须包含文件的扩展名,如果实际扩展名是
lua.txt
,那就不能简写为lua
。
xLua 的 CustomLoader
与 DoString
方法都需要修改。
配置方法
实测这两种组合都可以断点调试:
- IntelliJ Idea 2019.2.4 Community + EmmyLua 1.3.0.131-IDEA182
- Rider 2017.3.1 + EmmyLua 1.3.2.142-IDEA172
配置过程
- 在 IDE 的
Run/Debug Configurations
中增加Emmy Debugger(NEW)
配置,命名为Emmy Debugger
。 - 将上一步配置中的调试代码复制到首个加载的 Lua 文件最后。
- 配置完成,现在可以在 Lua 代码中设置断点,在 Debug 配置中选择
Emmy Debugger
并点击 Debug 按钮(在 Unity 运行加载完调试代码后),就可以正确触发断点了。
下载地址
- Unity - Download Archive
- Other Versions - IntelliJ IDEA
- Other Versions - Rider
- Versions: EmmyLua - IntelliJ IDEs Plugin | Marketplace
总结
项目使用的 Unity 版本比较旧,并且没有调试文档,导致无法调试。手动排查问题修复到可以调试后,将调试相关的软件版本及调试方法写成文档,提交到项目仓库中,方便后续人员开发。
其实就算是最新版本的软件,在未来也会变成旧版软件,因此一定要记录保留当时可用的组合。使用的 IDE、插件、操作系统版本等等,这些信息可能当时觉得没什么用,但是后续在重建现场进行维护时才会发现这些信息的重要性。