2009-12-08 3 views
78

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

Симулятор сильно падает, но не оставляет никаких следов в консоли ... журнал сбоев будет полезен.

+2

Я не совсем понимаю, зачем нужны журналы аварий. Когда приложение в симуляторе выйдет из строя, но прежде чем остановить отладку, в приглашении gdb введите «bt» для «backtrace» - вы получите именно то, что появится в журнале сбоев. (не понимал, что здесь был вопрос о некромантии, пропустил отчетный год) –

+2

Если авария произошла, когда вы не были прикреплены отладчиком, вам понадобятся журналы. – Ian1971

+0

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

ответ

126

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

Я нашел некоторые в моем домашнем каталоге под

~/Library/Logs/DiagnosticReports/ 

Они имеют расширение файла .crash

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


Update

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

~/Library/Logs/CoreSimulator

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

Также непосредственно под CoreSimulator, см. и Simulator.log.

+0

Бинго! Вы спасли мою жизнь! – Raptor

+0

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

+11

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

12

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


ОБНОВЛЕНИЕ:

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

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

~/Library/Logs/CoreSimulator

В том, что начать с изучения stderr.log и system.log.

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

~/Library/Logs/DiagnosticReports

Не следует путать этот путь с

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

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

+0

Да. Дополнительная информация здесь http://developer.apple.com/iphone/library/documentation/Xcode/Conceptual/iphone_development/130-Debugging_Applications/debugging_applications.html –

+0

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

+7

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

1

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

  1. кд в директории, имеющей в файлы .app & .dSYM
  2. запустить /Developer/Platforms/iPhoneOS.platform/Developer/USR/libexec/GDB/GDB-рычажного яблочно-Darwin MyApp.app/MyApp
  3. набор печати ASM-demangle на
  4. набора печатных символов-файла на
  5. р/а 0 × 00015c64 -> адрес получил открыв журнал сбоев в приложении «Консоль» или просто дважды щелкнув файл .crash.
+3

Я не совсем понимаю, зачем нужны журналы сбоев. Когда приложение в симуляторе выйдет из строя, но прежде чем остановить отладку, в приглашении gdb введите «bt» для «backtrace» - вы получите именно то, что появится в журнале сбоев. –

+0

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

3

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

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

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

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

+0

Кстати, оригинальная проблема с SIGKILL, которую я изучала, оказалась без проблем: http://stackoverflow.com/questions/7901262/xcode-debugger-stops-with-sigkill-on-stop-button –

+0

Я должен указать, что в приложении/Утилитах не было приложения CrashReporterPrefs, однако я искал его и смог найти приложение в другом месте. – Justin

+0

@Justin где вы его нашли? –

1

краш-крешлогам появится под ~/Library/Logs/CrashReporter.

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

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

+0

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

0

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