Сбой iOS только тогда, когда НЕ работает через XCode.Concidence? - PullRequest
6 голосов
/ 29 марта 2012

Мое приложение зависало, только когда не запускалось с использованием отладчика XCode.Это было трудно отследить, потому что я не могу отладить, но я наконец понял это.Это было из-за вызова release для какого-то объекта, не принадлежащего мне.Прежде чем исправить это, я искал и нашел 2 связанных вопроса здесь (ссылки ниже)

Приложение iOS Сбои при запуске самого устройства на устройстве, не происходит сбой при запуске через Xcode с использованием отладчика или в симуляторе

Сбой iPhone только тогда, когда устройство не подключено к xcode, как понять журнал сбоев?

Ни на один из приведенных выше вопросов не ответили, почему не происходит сбой при запуске через отладчик. Так что мой вопрос, почему это происходит?Я знаю причины отладки / выпуска определенных сбоев, но это безумие.Это случайно, хотя это произошло более 10 раз.

Ответы [ 5 ]

2 голосов
/ 29 марта 2012

То, что вы описываете, нетипично для неясных ошибок, связанных с памятью.Вы также можете использовать debug-malloc в такие моменты.Хотя это не гарантировано, чтобы найти все.Причина (и это происходило, вероятно, до тех пор, пока были отладчики на уровне исходного кода) заключается в том, что память отлаживается, по крайней мере, несколько по-разному в отлаживаемом коде и при работе под отладчиком.Таким образом, ошибка приводит к (безвредному) повреждению другой части памяти в режиме отладчика.Когда не в отладчике, поврежденное местоположение на самом деле является тем, о чем заботится ваш код, и происходит сбой.

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

1 голос
/ 25 апреля 2018

Повторяя ответ @ jyoung, так как я не видел его в первый раз, когда я просмотрел:

Попробуйте запустить с выключенными объектами Zombie.

В режиме отладки, если он включен, он обрабатывает выделение памяти по-другому. Попробуйте запустить его без.

Перейти к Редактировать схему ...> Выполнить> Диагностика. Затем убедитесь, что объекты-зомби выключены:

enter image description here

Затем снова пройдите путь кода.

0 голосов
/ 16 марта 2016

У меня тоже была эта проблема, и мне посчастливилось быстро выяснить причину, надеюсь, разместив здесь сообщение, я смогу сэкономить кому-то еще немного потраченного времени. Для пояснения, мое приложение будет работать без проблем при запуске непосредственно из XCode, но сразу же вылетает при запуске вручную на iPad.

Соответствующее приложение написано на Obj-C, но опирается на некоторый сторонний код, написанный на Swift. Код Swift включен в приложение как встроенный фреймворк. В настройках сборки приложения (в разделе «Параметры сборки») мне пришлось установить для «Встроенного содержимого, содержащего код Swift» значение «Да», после чего проблема исчезла.

0 голосов
/ 21 февраля 2013

Я столкнулся с этим симптомом, когда создал NSString, отправил UTF8String из него другому объекту и назначил его на указатель на символ. Что ж, получается, что я забыл сохранить исходную строку NSString, которая в любом случае не имела бы значения, поскольку я также не смог понять, что метод UTF8String (который, по-видимому, является объектом, который предоставляет доступ к самому указателю), работает в автоматическом выпуске. бассейн. То есть сохранение самой строки NSSt не решило проблему.

Полагаю, это работало нормально, когда подключено к отладчику только потому, что у меня включены зомби, поэтому указатель у меня все еще действовал. Я должен посмотреть, если это причина, по которой это сработало; Если это так, то это хорошая причина для тестирования с включенным NSZombie и без него.

В любом случае, это был, вероятно, плохой дизайн с самого начала, и довольно очевидная ошибка управления памятью новичка, когда я ее нашел. К счастью, консоль в окне «Органайзер» дала мне несколько советов о том, с чего начать поиск, и отладка в конечном итоге показала, где менялось значение моего указателя. Надеюсь, это поможет любому, кто найдет дорогу сюда.

0 голосов
/ 13 июля 2012

У меня была эта проблема при доступе к базам данных SQLite вне каталога [[NSBundle mainBundle] resourcePath], что вызывало ошибки iCloud.

Я обнаружил ошибку, только установив консольное приложение на свой iPhone, которое регистрировало ошибки.

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

...