QuincyKit/PLCrashReporter: предоставить описание * до * сбоя

Я использую QuincyKit, который работает поверх PLCrashReporter, чтобы обнаружить производственные сбои в моем приложении для iOS и получить журналы. Иногда это было бы чрезвычайно полезно для отладки, если бы у меня было несколько переменных из нескольких уровней стека вызовов выше точки сбоя. Например, с каким идентификатором записи произошел сбой, если код обработки записи имеет много уровней вложенности.

Вопрос в том, есть ли способ предоставить некоторую строку контекста, которая будет вставлена ​​в журнал сбоев в качестве описания во время генерации? Я установил бы это при входе в стек вызовов для записи, я очистил бы это при выходе. Лучше, если оно непостоянно (то есть в памяти) - боюсь, что запись в энергонезависимое хранилище все время будет обременительной для батареи.

2 ответа

Решение

Найден ограниченный обходной путь. Я использую блок разделяемой памяти с именем, полученным из идентификатора пакета, для хранения строки контекста. Блок очищается при правильном отключении. Тогда я переопределяю -crashReportDescription в моем делегате Quincy, так что он предоставляет содержимое общей памяти, если таковые имеются, в качестве описания. Это только непусто, если последнее закрытие приложения было сбоем.

Очевидно, что у этого подхода есть недостатки. Если они, скажем, перезагружают устройство между сбоем и следующим запуском приложения, информация об общей памяти теряется.

РЕДАКТИРОВАТЬ: в первой версии проекта я использовал частную, названную UIPasteboard вместо общей памяти. Это оказалось хитом производительности. Общая память на порядки быстрее.

EDIT2: но затем они сломали разделяемую память в iOS 7, поэтому UIPasteboard вернулся. Облом.

РЕДАКТИРОВАТЬ 3: нашел другой подход, менее элегантный, но он работает в iOS 7. Я храню свою контекстную строку в простом статическом блоке памяти. Я помещаю пользовательский обработчик сбоя в PLCrashReporter с помощью [[PLCrashReporter sharedReporter] setCrashCallbacks:], В обработчике я записываю указанный контекст (если есть) в файл. При запуске приложения я читаю указанный файл и предоставляю содержимое (если есть) в -crashReportDescription, Уходи, UIPasteboard.

Нет, но эта функция была предложена более 2 лет назад, и есть патч.

Я бы на самом деле предпочел версию, которая позволяла бы регистрировать содержимое кольцевого буфера (в который вы могли бы эффективно записывать сообщения!), Что потенциально намного более полезно.

Другие вопросы по тегам