Поиск источника переиздания - PullRequest
0 голосов
/ 31 марта 2010

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

Соответствующий раздел из отчета о сбое показывает это:

Application Specific Information:
objc_msgSend() selector name: release

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   libobjc.A.dylib                     0x90892edb objc_msgSend + 27
1   com.apple.CoreFoundation            0x95ec5a40 __CFBasicHashStandardCallback + 384
2   com.apple.CoreFoundation            0x95ec564e __CFBasicHashDrain + 478
3   com.apple.CoreFoundation            0x95ead6f1 _CFRelease + 353
4   com.apple.CoreFoundation            0x95eda0ed _CFAutoreleasePoolPop + 253
5   com.apple.Foundation                0x97ecedd6 NSPopAutoreleasePool + 76
6   com.apple.Foundation                0x97ececfe -[NSAutoreleasePool drain] + 130
7   com.apple.AppKit                    0x9211255f -[NSApplication run] + 1013
8   com.apple.AppKit                    0x9210a535 NSApplicationMain + 574
9   TheApp                          0x000020a6 start + 54

Я использовал зомби и утечки, но ничего там не видел. Я просмотрел код и не вижу его.

Какой следующий шаг? Есть ли какие-либо подсказки, которые я могу различить из этой информации относительно ее источника?

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

Означает ли ссылка на _CFRelease, что это базовый объект Foundation, который был переиздан?

1 Ответ

1 голос
/ 31 марта 2010

Я использовал зомби и утечки, но ничего там не видел.

Это странно.

Какой следующий шаг?

Следующим шагом для аварийного сброса обычно является запуск приложения с использованием шаблона Zombies Instruments. Второе сообщение о выпуске поднимет флаг на графике шкалы времени инструментов, с кнопкой, которую вы можете нажать, чтобы узнать больше информации.

Также попробуйте собрать приложение с помощью статического анализатора в Xcode 3.2 или более поздней версии.

Означает ли тот факт, что этот почти тот же самый отчет о сбоях поступает многократно, означает, что это тот же объект, который был переиздан, или потому что это относится к пулу авто-релиза, означает, что это может быть любой объект?

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

Означает ли ссылка на _CFRelease, что это базовый объект Foundation, который был переиздан?

номер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...