Журналы сбоев, созданные iPhone Simulator?


97

Есть ли журналы сбоев, создаваемые iPhone Simulator?

Симулятор часто вылетает, но не оставляет следов в Консоли ... Журнал сбоев будет полезен.


2
Не совсем понимаю, зачем вам журналы сбоев. Когда приложение в симуляторе аварийно завершает работу, но до того, как вы остановите отладку, в приглашении GDB введите «bt» для «backtrace» - вы получите именно то, что появилось бы в журнале сбоев. (не понимал, что здесь есть вопрос о некромантии, пропустил почтовый год)
— Мэтью Фредерик,

3
Если сбой произошел только тогда, когда вы не были подключены отладчиком, вам потребуются журналы.
— Ian1971 01

ты прав. это имеет смысл!
— Raptor

Вы также можете увидеть журнал отладки (включая вывод команд lldb) в «Навигаторе отчетов» в Xcode (cmd-8). Это также полезно для просмотра результатов отладки для предыдущих запусков. Если отладчик не был подключен, то это явно не сработает.
— Себастьян Мартин,

2
Журнал отладки - это не то же самое, что журнал сбоев, хотя оба журнала полезны для отладки проблемы.
— Raptor

Ответы:


159

Консоль покажет NSLog()вывод приложения, запущенного в симуляторе. Журналы сбоев сохраняются в файл.

Я нашел некоторые из них в своем домашнем каталоге в

~/Library/Logs/DiagnosticReports/

У них есть расширение файла .crash

Я еще не понял, как заставить их генерировать, даже если отладчик захватывает EXC_BAD_ACCESSсигнал.


Обновить

В настоящее время (OSX 10.11.6) .crash выполняет вход в систему ~/Library/Logs/DiagnosticReports, когда сам эмулятор дает сбой . Журналы сбоев приложения (но устройство эмулятора все еще работает нормально) находятся в:

~ / Библиотека / Журналы / CoreSimulator

В случае сбоя есть подпапка с уникальным идентификатором. Сортируйте по дате, чтобы ваша недавняя авария была первой подпапкой. Внутри начните с просмотра stderr.logи system.log.

Кроме того, непосредственно под CoreSimulatorсм CoreSimulator.logи Simulator.log.


Есть идеи, почему эти журналы записываются в файл, а не отображаются в консоли? Кстати, спасибо за информацию.
— aqua

11
Ни один из моих отчетов о сбоях в симуляторе iPhone или iPad не отображается в этом каталоге, может быть, этот ответ нужно обновить?
— Джастин

3
Возможно, он действительно нуждается в обновлении, но голосование против - не очень вежливый способ поощрить его.
— ohhorob

2
Я нашел отчет о сбое в указанном каталоге, но был только один отчет, и он был не самым последним (т. Е. Я продолжал пробовать несколько вещей в приложении, и оно продолжало давать сбой). Все сбои были одинаковыми, поэтому это не было проблемой, но мне интересно, так ли это вообще?
— Samik R

10
И Джастин, и Охороб правы. Вам нужно запустить приложение на симуляторе БЕЗ Xcode и воспроизвести сбой, чтобы увидеть журналы,~/Library/Logs/DiagnosticReports/
— Дэйв Чемберс,

20

Я почти уверен, что вы можете увидеть это в приложении OS X Console, расположенном в Utilities. Если я ошибаюсь, не забудьте проголосовать за меня, чтобы я удалил это.


ОБНОВИТЬ:

В частности (начиная с OSX 10.11.6),

Когда приложение вылетает на эмуляторе, вложенная папка (с уникальным идентификатором) добавляется в:

~ / Библиотека / Журналы / CoreSimulator

В рамках этого начните с изучения stderr.logи system.log.

Когда эмулятор сам падает, вложенная папка добавляется:

~ / Библиотека / Журналы / DiagnosticReports

Не путайте этот путь с

/ Библиотека / Журналы

(отсутствует ~при запуске), в котором есть разные отчеты о вашем Mac.



похоже, что это относится только к устройствам iPhone, а не к симулятору. Поправьте меня, если я ошибаюсь.
— Raptor

7
Консоль можно открыть из симулятора, нажав Cmd- / или используя опцию меню Debug / Open System Log ...
— lambmj

5

Вот кое-что, что сработало для меня в особом случае ... Мое приложение вылетало из-за SIGKILL при завершении. Я бы увидел исключение в main.m в течение нескольких секунд, а затем приложение завершило бы завершение работы - таким образом, не было бы шансов получить обратную трассировку.

Я много искал, «где симулятор хранит журналы сбоев», и так и не смог найти ответа. Однако следующий трюк мне очень пригодился, и я смог на лету получить журнал сбоев:

Обычно откройте /Applications/Utilities/CrashReporterPrefs.app и измените настройку на «Разработчик». Это приведет к тому, что CrashReporter отобразит всплывающее окно с журналом сбоев после сбоя вашего приложения.

Я нашел это в разделе «Просмотр консоли симулятора iOS и журналов сбоев» в этом документе от Apple: http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/ios_development_workflow/125-Using_iOS_Simulator/ios_simulator_application. html


Между прочим, исходная проблема с SIGKILL, которую я исследовал, оказалась без проблем: stackoverflow.com/questions/7901262/…
— dana_a

Я должен отметить, что в Application / Utilities не было приложения CrashReporterPrefs, однако я искал его и смог найти приложение в другом месте.
— Джастин

@ Джастин, где ты это нашел?
— Охад Шнайдер

1
Обратите внимание, что упомянутый выше инструмент можно загрузить из Xcode в комплекте под названием «Дополнительные инструменты для Xcode» developer.apple.com/download/more/…
— markshiz

1

Это намного надежнее. Всего за несколько шагов я смог найти номер исходной строки и имя метода:

  1. cd в каталог с файлами .app и .dSYM
  2. запустите /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gdb/gdb-arm-apple-darwin MyApp.app/MyApp
  3. установить печать asm-demangle на
  4. установить print symbol-filename на
  5. p / a 0 × 00015c64 -> адрес получен открытием журнала сбоев в приложении «Консоль» или двойным щелчком по файлу .crash.

3
Не совсем понимаю, зачем вам журналы сбоев. Когда приложение в симуляторе вылетает, но до того, как вы остановите отладку, в приглашении gdb введите «bt» для «backtrace» - вы получите именно то, что появилось бы в журнале сбоев.
— Мэтью Фредерик,

Этот метод отлично подходит для журналов сбоев с клиентских телефонов.
— Gamma-Point

1

Журналы сбоев будут отображаться в ~ / Library / Logs / CrashReporter.

  • Если программа симулятора iPhone выйдет из строя (а не приложение iPhone, работающее в симуляторе), тогда будет запись для iPhoneSimulator.
  • Если приложение iPhone в симуляторе выйдет из строя, появится журнал сбоев с отображаемым именем приложения.

Когда Xcode получает журналы сбоев с подключенного устройства, он сохраняет их в подпапках ~ / Library / Logs / CrashReporter / MobileDevice.


Прошло больше года, но я вижу, что «приложение в симуляторе» вылетает в ~ / Library / Logs / DiagnosticReports ... и выглядит так: MobileSafari_2013-03-21-155844_My-MacBook-Pro.crash
— Rob

0

Для меня это было выражение, которое я добавил в окно наблюдения отладчика. Когда срабатывала точка останова, неправильное выражение приводило к сбою XCode.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.