Version: 2020.1
Scripting Tools
日志文件

Console 窗口

Console 窗口显示 Unity 生成的错误、警告和其他消息。

还可以使用 Debug.LogDebug.LogWarningDebug.LogError 函数,在控制台中显示自定义的消息。

要从 Unity 的主菜单中打开控制台,请选择 Window > General > Console

A. Console 窗口菜单包含了用于打开日志文件、控制列表中显示的消息数量以及设置堆栈跟踪的选项。

B. Console 工具栏包含用于控制显示的消息数量以及搜索和过滤消息的选项。

C. 控制台列表针对每条记录的消息显示一个条目。

选择一条消息可在详细信息区域中显示其完整文本。您可以选择在这里显示每条消息的多少行。

请参阅下面的调整行计数,以获取更多信息。

D. 详细信息区域显示所选消息的全文。

如果启用了堆栈跟踪,那么对代码文件中特定行的引用将在此处显示为可点击的链接。

Console 工具栏选项

Console 窗口的工具栏包含用于控制显示的消息数量以及搜索和过滤消息的选项。

选项: 功能:
Clear 移除从代码中生成的所有消息,但会保留编译器错误。
Collapse 仅显示重复消息的第一次出现。

有时在每次帧更新时会生成的运行时错误(例如 null 引用),此选项在这种情况下非常有用。
Clear On Play 每当进入播放模式时就会自动清空控制台。
Clear on Build 在构建项目时清空控制台。
Error Pause 只要从脚本中调用了 Debug.LogError 便暂停回放。

如果您希望在执行中的特定时刻冻结回放并检查场景,那么此选项很有用。

当调用 Debug.Log 时,此选项不会暂停回放。
[Attach-to-Player] 打开一个下拉菜单,其中包含的选项可用于连接到运行在远程设备上的开发版以及在控制台中显示其播放器日志。

此选项被标记为目标开发版的名称(也就是 Console 窗口中显示的日志的版本)。如果控制台未连接到远程版本,则标记为 Editor,以表明 Console 窗口中显示的日志是来自本地 Unity Editor。
Player Logging 如果控制台连接到远程开发版,则此选项将对版本启用播放器日志记录。

禁用此选项将暂停日志记录,但控制台仍将连接到目标版本。

禁用此选项还会隐藏此下拉菜单中的其余选项。

选择在 Player Logging 下方列出的任何版本可在 Console 窗口中显示其日志。
Editor 如果控制台连接到远程开发版本,则选择此选项可显示来自本地 Unity Player 的日志,而不是来自远程版本的日志。
<Enter IP> 打开 Enter Player IP 对话框,可以在此对话框中指定远程设备上开发版本的 IP 地址。

单击对话框中的 Connect 按钮可连接到版本,并可将其添加到下拉菜单底部的开发版本列表中。
[DEVELOPMENT BUILDS] 列出可用的开发版本。这包括自动检测到的版本以及使用 Enter IP 选项添加的版本。
消息开关 显示控制台中的消息数量。单击可显示/隐藏消息。
警告开关 显示控制台中的警告数量。单击可显示/隐藏警告。
错误开关 显示控制台中的错误数量。单击可显示/隐藏错误。

搜索和过滤控制台输出

可以从控制台搜索栏中搜索包含特定关键字的控制台消息。在输入搜索词时,控制台将过滤消息以仅显示包含匹配文本的消息。如果消息文本中的第一个匹配项是在消息的可见部分中,控制台将高亮显示第一个匹配项(请参阅下文调整行计数)。但控制台不会高亮显示同一消息中的后续匹配项。

搜索词语animation会高亮显示每条消息中的第一个匹配项(蓝色),但不会高亮显示后续匹配项(红色)
搜索词语“animation”会高亮显示每条消息中的第一个匹配项(蓝色),但不会高亮显示后续匹配项(红色)

可以搜索在任何控制台消息中显示的任何内容,包括数字和特殊字符。例如,您可能希望搜索消息被记录的时间,而不是消息中包含的关键字。

搜索会查找与在搜索栏中键入的内容完全匹配的内容。不能同时搜索两个不同的词语,也不能使用常见的搜索引擎运算符。

还可以按类型来过滤控制台消息。单击搜索栏旁边的按钮以进行切换:

按钮 消息类型
消息
警告
错误

调整行计数

每个控制台条目的最大长度为 10 行。

要控制每个条目在列表中显示多少行,请单击控制台的菜单按钮,然后从菜单中选择 Log Entry > [X] Lines,其中 [X] 表示要为每个条目显示的行数。

日志条目行计数
日志条目行计数

行数越大,每个条目显示的文本就越多,但会减少任何给定时间可见的条目数。

行计数不影响控制台搜索功能,该功能总是搜索完整的消息文本。如果匹配的文本位于隐藏的行中,则搜索将返回结果中的消息,但不会展开来显示/高亮显示匹配的文本。可以在详细信息区域看到完整的消息文本,但是匹配的文本不会高亮显示。

堆栈跟踪日志记录

Unity 在将消息输出到控制台或日志文件时,可以包括详细的堆栈跟踪信息。在某些情况下,这个功能很有用,例如,当错误消息不太明确时。在这种情况下,堆栈跟踪可以帮助您确定错误的来源。

托管与非托管堆栈跟踪

控制台可以提供托管代码和非托管代码的堆栈跟踪信息。

  • 托管代码意味着 C# 脚本在 Unity 中运行。其中包括 Unity 附带的脚本、您编写的自定义脚本、Asset Store 插件附带的第三方脚本或者引擎中运行的任何其他类型的 C# 脚本。

    在某些情况下,您可以访问托管代码,并且可以在调试时修改托管代码。在其他情况下,您无法访问托管代码,例如,当托管脚本编译为托管 .dll 时,可以查看托管堆栈跟踪信息,但除非您能够访问原始源代码文件,否则不能修改托管代码。

  • 非托管代码表示原生 Unity 引擎代码,或者是直接运行在计算机上或目标版本平台上运行的原生插件中的代码。

    非托管代码通常是从 C 或 C++ 代码编译的。除非您有原生二进制文件的原始源代码,否则无法访问非托管代码。

在大多数情况下,只使用托管堆栈跟踪来帮助调试 C# 代码。但在某些情况下,完整的堆栈跟踪可能很有用。

例如,非托管堆栈跟踪可以帮助您确定错误是由代码造成,还是由引擎造成。还可以帮助您识别错误来源于引擎的哪个区域。当没有托管堆栈跟踪信息而且错误消息的描述不是非常具体时,此功能尤其有用。

注意:解析堆栈跟踪(特别是整个堆栈跟踪)是一种资源密集型操作。只有在调试时才应使用这些选项。

设置堆栈跟踪类型

要指定在堆栈跟踪中包含的信息详细程度,请单击控制台的菜单按钮,从菜单中选择 Stack Trace Logging > [MESSAGE TYPE],其中 [MESSAGE TYPE] 表示您希望包含堆栈跟踪信息的消息类型。然后,选择下列选项之一:

堆栈跟踪日志记录选项
堆栈跟踪日志记录选项
  • None:Unity 不输出堆栈跟踪信息。

  • ScriptOnly:Unity 输出托管代码的堆栈跟踪信息。

  • Full:Unity 输出托管_和_非托管代码的堆栈跟踪信息。

还可以通过脚本 API 来控制堆栈跟踪日志记录。请参阅关于 Application.SetStackTraceLogType 的 API 参考文档以了解更多详细信息。

从堆栈跟踪输出中打开源文件

选择一条消息并在控制台窗口底部的详细信息区域查看全文时,对代码文件中特定行的堆栈跟踪引用将变为可点击的链接。单击任意链接即可在 IDE 中打开文件并转到引用的行。

从控制台打开日志文件

可以从 Console 窗口菜单中打开日志文件。选择 Open Player LogOpen Editor Log

过时 API 警告和自动更新

除了其他消息,Unity 还显示有关在代码中使用过时 API 调用的警告。例如,Unity 曾在 MonoBehaviour 和其他类中使用“快捷方式”来访问常见组件类型。因此,比如说,可使用如下代码来访问对象上的刚体

    //"rigidbody"变量是类的一部分,未在用户脚本中声明。
        Vector3 v = rigidbody.velocity;

这些快捷方式已被弃用,因此现在应该使用如下代码:

    // 使用 GetComponent 来访问组件。
        Rigidbody rb = GetComponent<Rigidbody>();
        Vector3 v = rb.velocity;

控制台检测到过时 API 调用时,Unity 将显示相关的警告消息。双击此消息时,Unity 将自动尝试将已弃用的用法升级到建议的等效用法。


  • 2019–03–11 页面已修订

  • 2017.3 版中添加了日志条目行计数 NewIn20173

  • 2019.1 版中添加了搜索栏和可点击堆栈跟踪消息 NewIn20191

Scripting Tools
日志文件