Version: 6000.3
语言: 中文
在 Unity 中调试 C# 代码
Debug 类

调试故障排除

调试器的大多数问题都是由于 IDE 无法找到 Unity 编辑器或 Unity Player 而发生的。这意味着 Unity 编辑器或播放器无法正确附加调试器。由于调试器使用与编辑器或播放器的TCP连接,因此连接问题通常是由网络引起的。您可以采取以下几个步骤来解决基本连接问题。

确保将调试器附加到正确的 Unity 实例

可以将 IDE 附加到启用了调试的本地网络上 Unity 编辑器或 Unity Player 的任何实例。附加调试器时,请确保将其附加到正确的 Unity 实例。如果您知道运行 Unity Player 的设备的 IP 地址或计算机名称,这有助于找到正确的实例。

验证与 Unity 实例的网络连接

IDE 使用与 Unity 相同的机制来查找要调试的 Unity 实例分析器帮助您优化游戏的窗口。它显示了在游戏的各个领域花费了多少时间。例如,它可以报告渲染、动画制作或游戏逻辑所花费的时间百分比。更多信息
请参阅术语表
.如果 IDE 找不到所需的 Unity 实例,请尝试将探查器附加到该实例。如果探查器也找不到 Unity 实例,则运行 IDE 或 Unity 实例的计算机上可能存在防火墙。如果已设置防火墙,请参阅检查防火墙设置

确保设备只有一个活动网络接口

许多设备具有多个网络接口。例如,移动电话可能同时具有活动的蜂窝网络连接和活动的 Wi-Fi 连接。若要使用 TCP 将调试器正确连接到 Unity 实例,IDE 需要与设备上的正确接口建立网络连接。例如,如果您计划通过 Wi-Fi 进行调试,请确保将设备置于飞行模式以禁用所有其他接口,然后启用 Wi-Fi。

您可以通过查看玩家日志(Player Log)由独立播放器创建的.log文件,其中包含事件记录,例如脚本执行时间、编译器版本和 AssetImport 时间。日志文件可以帮助诊断问题。更多信息
请参阅术语表
.查找日志的一部分,如下所示:

Multi-casting "[IP] 10.0.1.152 [Port] 55000 [Flags] 3 [Guid] 2575380029 [EditorId] 4264788666 [Version] 1048832 [Id] iPhonePlayer(Example-iPhone):56000 [Debug] 1 [PackageName] iPhonePlayer" to [225.0.0.222:54997]...

此消息表示 IDE 将尝试使用 IP 地址 10.0.1.152 和端口 56000 连接到设备。此 IP 地址和端口必须可从运行 IDE 的计算机访问。

检查防火墙设置

Unity 实例使用 TCP 连接与 IDE 通信。在大多数 Unity 平台上,此 TCP 连接发生在任意选择的端口上。通常,您不需要知道此端口,因为 IDE 应该会自动检测它。如果这不起作用,请使用网络分析工具确定运行 IDE 的计算机或运行 Unity 实例的计算机或设备上的端口可能会被阻止。找到端口后,请确保防火墙允许访问运行 IDE 的计算机和运行 Unity 实例的计算机上的端口。

验证托管调试信息是否可用

如果调试器附加到 Unity 实例,但断点未加载,则调试器可能无法找到代码的托管调试信息。托管代码调试信息存储在名为 .pdb 的文件中,位于磁盘上的托管程序集(.dll 文件)旁边。

当您启用正确的首选项和构建选项时,Unity 会自动生成此调试信息。但是,Unity 无法为托管生成调试信息插件在 Unity 外部创建的一组代码,用于在 Unity 中创建功能。可以在 Unity 中使用两种插件:托管插件(使用 Visual Studio 等工具创建的托管 .NET 程序集)和本机插件(特定于平台的本机代码库)。更多信息
请参阅术语表
在您的项目中。您只能从托管插件使用 Visual Studio 等工具创建的托管 .NET 程序集,用于 Unity 。更多信息
请参阅术语表
如果关联的 .pdb 文件位于磁盘上 Unity 项目中的托管插件旁边。

防止设备锁定

禁用用于调试应用程序的设备上的任何屏幕锁定。屏幕锁定会导致调试器断开连接,并阻止其重新连接。在托管代码调试期间不要锁定屏幕。如果屏幕锁定,请重启设备上的应用程序,以便调试器可以再次连接。

由于调试器导致的内存和线程泄漏

托管调试器为作系统线程句柄分配内存,以处理与线程启动和关闭相关的任何争用条件。这会产生小的内存泄漏,通常不会影响应用程序的资源使用。但是,当创建和销毁许多线程时,内存泄漏可能会很明显,并且很难跟踪应用程序中的其他内存泄漏。因此,建议在排查内存泄漏问题时禁用脚本调试。

其他资源

在 Unity 中调试 C# 代码
Debug 类