Как сделать сообщения debug.log до сбоя - PullRequest
0 голосов
/ 11 мая 2019

Когда происходит сбой единицы, debug.log s из предыдущего события не отображается. Который является тем самым событием, которое разрушило единство (вероятно, через цикл)

До сих пор я нашел Application.Quit (), но, очевидно, я могу использовать его, только если точно знаю, когда произойдет сбой Unity (например, для определения того, какой из некоторых (не вложенных) циклов завершится сбоем)

(я также нашел много информации, которая на самом деле ничего не делала, например, открыв окно консоли перед запуском игры. Не перечисляя все это)

Полагаю, этот пример кода должен достаточно хорошо описать проблему:

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

очевидно, что происходит только первая итерация. Но внутренний цикл обычно не падает в первые несколько раз. Поэтому я хотел бы регистрировать некоторые значения каждый раз, когда завершается внутренний цикл.

Ответы [ 3 ]

1 голос
/ 11 мая 2019

Вы можете использовать журналы Adb в cmd.

Если вы используете Unity с android, у вас уже должен быть установлен adb через Android SDK.Учитывая это, да, это должно быть просто и очевидно.И Бен прав.Похоже, вы недостаточно гуглили и не прилагали никаких усилий ... Но я просто ненавижу простые вопросы без ответов.

Есть только пара вещей, которые нужно гарантировать:

Убедитесь, что отладка по USBвключен на устройстве Android (проверьте в Настройки -> Разработка).- Запустите adb из командной строки (с аргументом командной строки logcat), которая поставляется вместе с Android SDK при запуске игры на Android, все еще подключенной через USB к компьютеру.

 adb logcat -s Unity ActivityManager PackageManager dalvikvm DEBUG

Наконец, если Android Debug Bridge не может вам помочь, я не уверен, что смогу.Был один раз, на самом деле, это не могло помочь мне ... Но я игнорировал предупреждение о единстве, поэтому я сделал контрольный список отладки в неправильном порядке.

Источник ответа

1 голос
/ 12 мая 2019

Вы можете добавить прослушиватель для регистрации события сообщения (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);
}
0 голосов
/ 11 мая 2019

Вы можете окружить рассматриваемый блок попыткой поймать. Если выдается ошибка, вы можете войти в нее в блоке catch.

try 
{

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