如何在崩溃之前渲染debug.log消息

时间:2019-05-11 09:25:55

标签: c# unity3d logging crash

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

到目前为止,我已经找到了Application.Quit(),但是很明显,只有在我确切知道统一何时崩溃(例如,找出某些(非嵌套)循环崩溃)的情况下,我才能使用它。

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

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

match([Head|Tail], List2):-
    memberchk(Head,List2).
match([_|Tail],List2):-
    match(Tail,List2).

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

3 个答案:

答案 0 :(得分:1)

您可以在cmd中使用Adb日志。

  

如果您将Unity与android一起使用,则必须已通过Android SDK安装了adb。鉴于此,应该简单明了。本是对的。您似乎对Google的搜索不够,也没有在这里付出任何努力...但是我只是讨厌简单的未解决的问题。

     

有几件事可以保证:

     

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

 adb logcat -s Unity ActivityManager PackageManager dalvikvm DEBUG
  

最后,如果Android调试桥无法为您提供帮助,我不确定会怎样。确实有一次,这无济于事...但是我忽略了一个统一的警告,所以我以错误的顺序进行了调试清单。

     

answer

的来源

答案 1 :(得分: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 :(得分:0)

您可以使用尝试捕获将问题块包围。如果抛出错误,则可以将其记录在catch块中。

try 
{

    while (condition) {
      DoSomething(); //contains a loop too
      Debug.Log (value);
    }
}
catch
{
    Debug.Log(value);
}
相关问题