MonoTouch - LLVM compiled App Hangs in 5.3.x in System.Collections.Generic.Dictionary?

We are working on a game using MonoGame, which works great with MonoTouch 5.2.x, before upgrading to 5.3.x beta, even 5.3.5.

The game just closes when you load our first level and only happens when compiling in Release mode for the device. Works great in a simulator or in debug mode for a device.

We did not know what the problem was until we used the trick that Rolf Quinge published here .

Here is a useful snippet of the crash log:

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) 

Looking at this, he seems to have come to a standstill on this line:

 Frame frame; if (myFramesDictionary != null && myFramesDictionary.TryGetValue(index, out frame)) { //Some code here } 

Frame is a structure, myFramesDictionary is a Dictionary<int, Frame> .

Is this a possible bug in MonoTouch 5.3.x? I do not know how to recreate the problem without sending our application to Xamarin.

UPDATE

We disabled the LLVM compiler option and it fixed the freeze.

I was unable to create a small project to reproduce the problem. Not sure if I want to send the entire Xamarin application for debugging. Any ideas on recreating this?

+4
source share
2 answers

I upgraded to Xcode 4.4 and command line tools, and this problem disappeared.

I'm not sure if the Xcode update is fixed, or maybe I updated Xcode, not the command line tools.

0
source

Unless you have very strange memory corruptions, you will not block in memset.

In addition, in order to diagnose a dead end, you need to show more than one thread, since you need at least two threads to a dead end first :)

I believe that you are running in an endless cycle. You can easily check this either with a breakpoint in the debugger, or using Console.WriteLine at the beginning of frame # 1 in the crash report.

+2
source

All Articles