получить logcat после системного сбоя

Можно ли получить logcat до сбоя системы после восстановления телефона? Т.е. мой телефон работает нормально, потом зависает и перезагружается, и я хочу просмотреть логи, когда он восстановится, чтобы попытаться определить, что вызвало крах. Я не могу найти никакого способа просмотреть logcat ни в чем, кроме реального времени, кроме как запустить и выполнить эмулятор терминала logcat -f logcat.txt V, а затем просто оставить его работающим навсегда. Это может создать массивный файл, который займет все мое хранилище.

Я не могу поверить, что нет возможности просмотреть отчет о сбое, я просто не могу понять, как это сделать.

Ответы (1)

К сожалению, logcat не выдерживает жесткой перезагрузки, потому что журналы хранятся в циклических буферах в памяти и никогда не записываются в хранилище. Ваше решение оставить сеанс терминала работающим может сработать, но, как вы сказали, файл может неконтролируемо увеличиваться, а во время перезагрузки может быть поврежден выходной файл. Я бы предложил добавить переключатели -rи -n, чтобы записывались только самые последние записи:

logcat -r 1024 -n 10 -f /sdcard/logcat.txt &

Это ограничивает журналы до 10 файлов с именами «logcat.txt», «logcat.txt.2» и т. д., каждый размером 1 МБ. Когда этот предел будет достигнут, он перезапишет первый файл и так далее.

Вы также можете заглянуть в /proc/last_kmsgфайл, в котором хранятся журналы ядра непосредственно перед последней перезагрузкой. Используйте cat /proc/last_kmsg > /sdcard/last_kmsg.txtкоманду, чтобы записать ее содержимое в файл в вашем хранилище.

Первый, пожалуй, лучший вариант. Существует ли риск повреждения последнего файла при жестком сбое? Кроме того, будет ли самый последний журнал всегда называться logcat.txt, а более старые журналы будут увеличивать свой суффикс, или самый новый журнал просто перезапишет самый старый и сохранит то же имя?
Самый новый всегда будет называться «logcat.txt», а остальные будут называться .1, .2 и .3. И да, всегда существует риск того, что файл, записываемый в данный момент, будет поврежден при сбое.
ок новый выпуск. Я запустил это из оболочки adb, что приятно, потому что оно работает в фоновом режиме. но я случайно поместил выходные файлы на свою внутреннюю SD-карту вместо внешней, и я не могу понять, как убить процесс. Я закрыл оболочку, но процесс все еще работает
Кроме того, он зацикливается на ~ 16 КБ и хранит только 5 файлов.
В topкоманде adb shell вы получите все запущенные в данный момент процессы. Попробуйте убить процесс с именем «logcat» с владельцем «shell». Синтаксис такой adb shell kill NNNN, где «NNNN» — это идентификатор процесса (1-й столбец в top.). Кроме того, перезагрузка устройства обязательно его остановит :)