我们正在使用 MonoGame 开发一款游戏,该游戏在 MonoTouch 5.2.x 上运行良好,直到更新到 5.3.x 测试版,甚至是 5.3.5。
游戏会在加载我们的第一个关卡时锁定,并且只会在设备的发布模式下编译时发生。在模拟器或设备的调试模式下工作正常。
我们不知道问题出在哪里,直到我们使用了 Rolf Kvinge 在此处发布的技巧。
这是崩溃日志的有用片段:
0 libsystem_c.dylib 0x32bd68b0 memset$VARIANT$CortexA9 + 152
1 DrawAStickmaniPhone 0x00492e40 DrawAStickmanCore_System_Collections_Generic_Dictionary_2_int_DrawAStickman_Core_Json_Frame_TryGetValue_int_DrawAStickman_Core_Json_Frame_ (DrawAStickmanCore.dll.7.s:36462)
2 DrawAStickmaniPhone 0x004d4e3c DrawAStickman_Core_FrameCounter_OnFrameChanged (DrawAStickmanCore.dll.7.s:137904)
3 DrawAStickmaniPhone 0x00479dbc DrawAStickmanCore_DrawAStickman_Core_BaseCounter_Update_Microsoft_Xna_Framework_GameTime (DrawAStickmanCore.dll.7.s:974)
4 DrawAStickmaniPhone 0x0048694c DrawAStickmanCore_DrawAStickman_Core_ElementStateComponent_Update_Microsoft_Xna_Framework_GameTime (DrawAStickmanCore.dll.7.s:17895)
5 DrawAStickmaniPhone 0x0047ce70 DrawAStickmanCore_DrawAStickman_Core_ElementComponent_Update_Microsoft_Xna_Framework_GameTime (DrawAStickmanCore.dll.7.s:5028)
6 DrawAStickmaniPhone 0x004d72cc DrawAStickman_Core_LevelComponent_Update_Microsoft_Xna_Framework_GameTime_0 (DrawAStickmanCore.dll.7.s:138769)
7 DrawAStickmaniPhone 0x0003d170 MonoGame_Framework_Microsoft_Xna_Framework_Game__UpdateActionm__2C_Microsoft_Xna_Framework_IUpdateable_Microsoft_Xna_Framework_GameTime (MonoGame.Framework.dll.7.s:69150)
8 DrawAStickmaniPhone 0x0003d284 MonoGame_Framework_Microsoft_Xna_Framework_Game_SortingFilteringCollection_1_ForEachFilteredItem_TUserData_System_Action_2_T_TUserData_TUserData (MonoGame.Framework.dll.7.s:69246)
9 DrawAStickmaniPhone 0x0003c3bc MonoGame_Framework_Microsoft_Xna_Framework_Game_Update_Microsoft_Xna_Framework_GameTime (MonoGame.Framework.dll.7.s:67887)
10 DrawAStickmaniPhone 0x004c7664 DrawAStickman_Core_StickmanGame_Update_Microsoft_Xna_Framework_GameTime (DrawAStickmanCore.dll.7.s:133288)
11 DrawAStickmaniPhone 0x0003c674 MonoGame_Framework_Microsoft_Xna_Framework_Game_DoUpdate_Microsoft_Xna_Framework_GameTime (MonoGame.Framework.dll.7.s:68138)
12 DrawAStickmaniPhone 0x0003c284 MonoGame_Framework_Microsoft_Xna_Framework_Game_Tick (MonoGame.Framework.dll.7.s:67751)
13 DrawAStickmaniPhone 0x0003e43c MonoGame_Framework_Microsoft_Xna_Framework_iOSGamePlatform_RunTick (MonoGame.Framework.dll.7.s:70871)
14 DrawAStickmaniPhone 0x0003e39c MonoGame_Framework_Microsoft_Xna_Framework_iOSGamePlatform_Tick (MonoGame.Framework.dll.7.s:70820)
15 DrawAStickmaniPhone 0x002fe8c0 monotouch_MonoTouch_Foundation_NSActionDispatcher_Apply + 12
16 DrawAStickmaniPhone 0x006de878 wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr_0 (mscorlib.dll.7.s:468944)
17 DrawAStickmaniPhone 0x00963780 mono_jit_runtime_invoke (mini.c:5792)
18 DrawAStickmaniPhone 0x009cdc04 mono_runtime_invoke (object.c:2788)
19 DrawAStickmaniPhone 0x0095aba4 native_to_managed_trampoline_MonoTouch_Foundation_NSActionDispatcher_Apply (registrar.m:19)
看着这个,它似乎在这样的一行上陷入僵局:
Frame frame;
if (myFramesDictionary != null && myFramesDictionary.TryGetValue(index, out frame))
{
//Some code here
}
Frame
是一个结构,myFramesDictionary
是一个Dictionary<int, Frame>
.
这是 MonoTouch 5.3.x 中可能存在的错误吗?如果不将我们的整个应用程序发送到 Xamarin,我不知道如何重新创建问题。
更新
我们禁用了 LLVM 编译器选项,它修复了挂起。
我无法创建一个小项目来重现该问题。不确定我是否要将整个应用程序发送到 Xamarin 进行调试。关于重新创建这个的任何想法?