Tag: 调用堆栈

自SDK 8更新以来,iOS 8 UIApplicationMain发生崩溃

由于我更新Xcode到6.0.1和iOS SDK到8.0我的应用程序不再在设备上运行(运行iOS 8 ofc)。 但它在模拟器中完美地工作。 应用程序在UIApplicationMain发生任何调用之前崩溃。 看起来CFTypeCollectionRetain中的值或键都是空的。 我试过了 重新创build证书/configuration文件。 用/不用ARC重build。 testing了armv7和arm64版本。 Xcode模板(游戏)应用程序编译和运行没有probs。 注意事项 几乎所有的代码都是C ++,它是一个游戏引擎,只使用最less的OS服务。 一些全局构造函数(在main之前执行)使用pthreads基元。 没有根视图控制器被创build(遗留的原因),而是创build一个自定义视图,它使用CAEAGLLayer来“启用”GLES …但由于程序没有达到创build这些点,我忽略了它的时间。 在UIApplicationMain里面有一个调用[_UIFlippingView layerClass]的崩溃; 但在Google上找不到有关UIFlippingView类的任何信息… 我不期望一个答案,但任何好的build议,看看下一个将非常感激! Callstack如下所示: * thread#1:tid = 0x185d9,0x23f7646c CoreFoundation`__CFTypeCollectionRetain + 104,queue ='com.apple.main-thread',stop reason = EXC_BREAKPOINT(code = EXC_ARM_BREAKPOINT,subcode = 0xdefe) * frame#0:0x23f7646c CoreFoundation`__CFTypeCollectionRetain + 104 frame#1:0x23fd9168 CoreFoundation`__CFBasicHashAddValue + 564 帧#2:0x23ec06c0 CoreFoundation`CFBasicHashAddValue + 19048 frame#3:0x23ef745e CoreFoundation`CFDictionaryCreate + 178 […]

如何获得iOS中的任意线程的正确的帧指针?

获取帧指针的方法 在iPhone 5s Device / Xcode 7上运行的Demo App上,我尝试使用thread_get_state获取任意线程的frame pointer ,但总是导致错误: – (BOOL)fillThreadState:(thread_t)thread intoMachineContext:(_STRUCT_MCONTEXT *)machineContext { mach_msg_type_number_t state_count = MACHINE_THREAD_STATE_COUNT; kern_return_t kr = thread_get_state(thread, MACHINE_THREAD_STATE, (thread_state_t)&machineContext->__ss, &state_count); if (kr != KERN_SUCCESS) { char *str = mach_error_string(kr); printf("%s\n", str); return NO; } return YES; } 我读这样的帧指针: uintptr_t fp = machineContext.__ss.__fp; ,根据苹果文件( ARMv6和ARM64 ), 寄存器R7被用作ARMv6上的帧指针 而ARM64上的x29 帧指针寄存器(x29)必须总是寻址一个有效的帧logging,尽pipe一些函数(如叶函数或尾调用)可能会select不在此列表中创build一个条目。 因此,即使没有debugging信息,堆栈跟踪也将始终有意义。 […]