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

97

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

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

Raptor
источник
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.

bpapa
источник
Ага. Подробнее здесь developer.apple.com/iphone/library/documentation/Xcode/…
Брэндон Боднар
похоже, что это относится только к устройствам 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

dana_a
источник
Между прочим, исходная проблема с 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.

pTymN
источник