SIGKill没有NSLogv的警告或堆栈跟踪

时间:2010-10-19 00:47:20

标签: iphone objective-c memory

我知道这是一个有点模糊的问题,但是在调试执行期间,我正在处理的应用程序在没有任何堆栈跟踪或警告的情况下死机,并且在调试控制台中只显示此消息:

  

收到信号:“SIGKILL”。

我在XCode中设置了NSZombieEnabled,NSDebugEnabled,MallocStackLoggingNotCompact和MallocStackLogging。

我已经运行了仪器来检查没有报告的内存泄漏。

在报告“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 个答案:

答案 0 :(得分:1)

检查格式字符串,提供的参数是正确的类型,例如格式字符串为@“%f”,参数为@“hello”,这会崩溃....