最新の Xcode (4.6.3) を使用していますが、iPhone ゲーム アプリケーションに大きな問題があります。ゲームはCocos2D for iPhone(2.1)で作っています。ゲームを実行していると、LLVM::something のようなエラーでクラッシュすることがあります。そして今、コンソールに1行の出力を持つSIGABRTがありました: UNREACHABLE が実行されました!
(lldb) bt
* thread #6: tid = 0x2503, 0x99f92a6a libsystem_kernel.dylib`__pthread_kill + 10, stop reason = signal SIGABRT
frame #0: 0x99f92a6a libsystem_kernel.dylib`__pthread_kill + 10
frame #1: 0x93e42b2f libsystem_c.dylib`pthread_kill + 101
frame #2: 0x03acc5eb libLLVMContainer.dylib`abort + 27
frame #3: 0x03abbcc5 libLLVMContainer.dylib`llvm::llvm_unreachable_internal(char const*, char const*, unsigned int) + 485
frame #4: 0x03a49922 libLLVMContainer.dylib`llvm::ValueHandleBase::ValueIsDeleted(llvm::Value*) + 578
frame #5: 0x03a496a7 libLLVMContainer.dylib`llvm::Value::~Value() + 39
frame #6: 0x03a24cb1 libLLVMContainer.dylib`llvm::BinaryOperator::~BinaryOperator() + 17
frame #7: 0x037e2c4e libLLVMContainer.dylib`(anonymous namespace)::LSRInstance::LSRInstance(llvm::TargetLowering const*, llvm::Loop*, llvm::Pass*) + 28830
frame #8: 0x037db8f7 libLLVMContainer.dylib`(anonymous namespace)::LoopStrengthReduce::runOnLoop(llvm::Loop*, llvm::LPPassManager&) + 39
frame #9: 0x03913148 libLLVMContainer.dylib`llvm::LPPassManager::runOnFunction(llvm::Function&) + 936
frame #10: 0x03a3767c libLLVMContainer.dylib`llvm::FPPassManager::runOnFunction(llvm::Function&) + 284
frame #11: 0x03a37036 libLLVMContainer.dylib`llvm::FunctionPassManagerImpl::run(llvm::Function&) + 198
frame #12: 0x03a36f3a libLLVMContainer.dylib`llvm::FunctionPassManager::run(llvm::Function&) + 122
frame #13: 0x0341d982 libLLVMContainer.dylib`llvm::JIT::getPointerToFunction(llvm::Function*) + 338
frame #14: 0x03392589 libCoreVMClient.dylib`cvmsCompBuildMonolithicFunction + 1614
frame #15: 0x033952c0 libCoreVMClient.dylib`cvmsServerBuildMonolithicFunction + 235
frame #16: 0x03393b22 libCoreVMClient.dylib`CVMSBuildMonolithicFunction + 99
frame #17: 0x0338aeea libCVMSPluginSupport.dylib`cvm_deferred_build_monolithic(void*) + 148
frame #18: 0x0338a5e0 libCVMSPluginSupport.dylib`cvmDoWork + 57
frame #19: 0x93e415b7 libsystem_c.dylib`_pthread_start + 344
この問題は非常に頻繁に発生し、10 回の実行で約 3 回発生します。たぶん、あなたはその問題とその原因を知っていますか?この問題の全体像を示すために、いくつかのスレッドのスタックから画像を提供しています。
非常に頻繁に発生するエラーがもう 1 つあります: EXC_BAD_ACCESS。それは同じ背景 ([CCSprite draw]) を持っています。バックトレース:
(lldb) bt
* thread #6: tid = 0x2503, 0x03a40f6b libLLVMContainer.dylib`llvm::PointerType::get(llvm::Type const*, unsigned int) + 27, stop reason = EXC_BAD_ACCESS (code=2, address=0xc)
frame #0: 0x03a40f6b libLLVMContainer.dylib`llvm::PointerType::get(llvm::Type const*, unsigned int) + 27
frame #1: 0x033bdab4 libLLVMContainer.dylib`llvm::GetElementPtrInst::GetElementPtrInst<llvm::Value**>(llvm::Value*, llvm::Value**, llvm::Value**, unsigned int, llvm::Twine const&, llvm::Instruction*) + 132
frame #2: 0x0341106c libLLVMContainer.dylib`llvm::BitcodeReader::ParseFunctionBody(llvm::Function*) + 3292
frame #3: 0x034153ad libLLVMContainer.dylib`llvm::BitcodeReader::Materialize(llvm::GlobalValue*, std::string*) + 381
frame #4: 0x03a3060b libLLVMContainer.dylib`llvm::Module::Materialize(llvm::GlobalValue*, std::string*) + 43
frame #5: 0x03a0bbaf libLLVMContainer.dylib`llvm::GlobalValue::Materialize(std::string*) + 31
frame #6: 0x0eef0f47 libGLVMPlugin.dylib`cvmLookupModularFunction + 72
frame #7: 0x0ef2e288 libGLVMPlugin.dylib`glvmBuildFPTransformFunction + 424
frame #8: 0x0ef416da libGLVMPlugin.dylib`cvmsModularBuilder + 166
frame #9: 0x0339278d libCoreVMClient.dylib`cvmsCompBuildModularFunction + 179
frame #10: 0x033956bf libCoreVMClient.dylib`cvmsServerBuildModularFunction + 245
frame #11: 0x03393bcf libCoreVMClient.dylib`CVMSBuildModularFunction + 112
frame #12: 0x0338a78f libCVMSPluginSupport.dylib`cvm_deferred_build_modular(void*) + 247
frame #13: 0x0338a5e0 libCVMSPluginSupport.dylib`cvmDoWork + 57
frame #14: 0x93e415b7 libsystem_c.dylib`_pthread_start + 344
LLVM ランタイム コードからの別の EXC_BAD_ACCESS:
スレッド 6 をサスペンドすると、すべて正常に動作し、クラッシュも発生しません。ただし、FPS レートは半分に低下します。問題の原因が何かわかりません。メモリリークが小さい場合でも(たとえば、5分間のアプリケーション実行で数バイト)、メモリリークをチェックして修復しました。ソースコードをいくつかの基本に切り詰めましたが、役に立ちませんでした。クラッシュはまだ存在します。誰にもアイデアがありますか?