4

私たちは 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 に送信してデバッグするかどうかはわかりません。これを再作成するアイデアはありますか?

4

2 に答える 2

2

非常に奇妙なメモリ破損がない限り、memset でデッドロックすることはありません。

さらに、デッドロックを診断するには、最初にデッドロックするには少なくとも 2 つのスレッドが必要なので、複数のスレッドを表示する必要があります :)

ある種の無限ループに陥っていると思います。これは、デバッガーのブレークポイントを使用するか、クラッシュ レポートのフレーム #1 の開始時に Console.WriteLine を使用して簡単に確認できます。

于 2012-07-25T22:38:20.640 に答える
0

XCode 4.4 とコマンド ライン ツールに更新したところ、この問題はなくなりました。

XCode の更新で修正されたのか、コマンド ライン ツールではなくXCode を更新したのかもしれません。

于 2012-08-20T14:23:20.427 に答える