SIGKill Без предупреждения или трассировки стека с NSLogv - PullRequest
2 голосов
/ 19 октября 2010

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

Программа получила сигнал: «SIGKILL».

У меня есть NSZombieEnabled, NSDebugEnabled, MallocStackLoggingNotCompact и MallocStackLogging, все установлено в XCode.

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

Последнее место, куда я могу перейти с отладчиком после того, как он сообщает, что «GDB: Interrupted» - это фрагмент кода, в котором вызывается NSLogv:

+ (void)print:(NSString *)format, ...
{
   va_list args;
   va_start(args, format);
   // Doesn't seem to go past this line
   NSLogv(format, args);                    
   va_end(args);        
}

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

Стек, показанный отладчиком после этого:

#0  0x02592e07 in ___forwarding___
#1  0x02592cd2 in __forwarding_prep_0___
#2  0x000ce57f in _NSDescriptionWithLocaleFunc
#3  0x0260b00d in __CFStringAppendFormatCore
#4  0x02552f87 in _CFStringCreateWithFormatAndArgumentsAux
#5  0x025da36e in _CFLogvEx
#6  0x0014beb5 in NSLogv

При повторном тестировании снова и снова SIGKILL постоянно происходит с вызовом NSLogv и больше нигде.

Что еще можно включить или настроить, чтобы выяснить, почему отладчик завершает работу экземпляра приложения?

1 Ответ

1 голос
/ 04 апреля 2011

Проверьте, что строка формата и заданные аргументы имеют правильный тип, например, со строкой формата @ "% f" и аргументом @ "hello", это приведет к сбою ....

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