【问题标题】:How do I render debug.log messages before crashing unity如何在统一崩溃之前呈现 debug.log 消息
【发布时间】:2019-05-11 09:25:55
【问题描述】:

当 unity 崩溃时,前一个事件中的 debug.log 不会呈现。这恰好是导致团结崩溃的事件(可能通过循环)

到目前为止,我已经找到了 Application.Quit(),但显然,只有在我准确知道 unity 何时崩溃时才能使用它(例如,找出某些(非嵌套)循环中的哪个崩溃)

(我还发现了很多实际上并没有做任何事情的信息,比如在开始游戏之前打开控制台窗口。虽然没有列出所有这些)

我想这个示例代码应该可以很好地描述问题:

while (condition) {
  DoSomething(); //contains a loop too
  Debug.Log (value);
  Application.Quit ();
}

显然,只有第一次迭代发生。 但是内部循环通常不会在最初的几次崩溃。所以我想在每次内部循环终止时记录一些值。

【问题讨论】:

    标签: c# unity3d logging crash


    【解决方案1】:

    您可以添加一个监听器以统一记录消息的事件(Application.logMessageReceived)并将其存储在文件中或通过网络发送以防止丢失。

    void Awake() 
    {
        DontDestroyOnLoad(this);
        Application.logMessageReceived += HandleLog;
    }
    
    void OnApplicationQuit()
    {
        Application.logMessageReceived -= HandleLog;
    }
    
    void HandleLog(string logString, string stackTrace, LogType type) 
    {
        File.AppendAllText ("D:/Log.txt" /*Path to your log folder*/, logString + stackTrace);
    }
    

    【讨论】:

      【解决方案2】:

      你可以在cmd中使用adb日志。

      如果您在 Android 上使用 Unity,您必须已经通过 Android SDK 安装了 adb。鉴于此,是的,它应该简单明了。本是对的。您似乎没有足够的谷歌搜索或在这里付出任何努力......但我只是讨厌简单的未回答的问题。

      只有几件事需要保证:

      确保在 Android 设备上启用 USB 调试(在设置 -> 开发下检查)。 - 在 Android 上运行游戏时,通过 Android SDK 附带的命令提示符(带有命令行参数 logcat)运行 adb,仍然通过 USB 连接到计算机。

       adb logcat -s Unity ActivityManager PackageManager dalvikvm DEBUG
      

      最后,如果 Android Debug Bridge 不能帮助您,我不确定什么可以。有一次,实际上,它对我没有帮助......但我忽略了一个统一警告,所以我按错误的顺序做了调试清单。

      answer的来源

      【讨论】:

      • 感谢您的回答。虽然我没有使用安卓。我在窗户上
      【解决方案3】:

      您可以用 try catch 包围有问题的块。如果它抛出错误,您可以将其记录在 catch 块中。

      try 
      {
      
          while (condition) {
            DoSomething(); //contains a loop too
            Debug.Log (value);
          }
      }
      catch
      {
          Debug.Log(value);
      }
      

      【讨论】:

      • 我很确定团结已经用一个 catch 块包围了每个事件。问题是,您无法捕获无限循环(或其他任何导致统一崩溃的原因)