2013-08-21 26 views
5

Pınvoke çağrıları için DllImport öznitelikleri olan sınıfı yüklerken Xamarin iOS ile oluşturulan bir iOS uygulaması var. istisnadır:Xamarin iOS, büyük bir yerel kitaplık yüklendiğinde System.TypeInitializationException öğesini atar

Unhandled managed exception: An exception was thrown by the type initializer for Pazanga.Native.ZzPINVOKE (System.TypeInitializationException) 

uygulama iyi çalıştı, ama yerli kütüphane boyutunda büyüyünce çökmesini başladı. Kütüphanenin bazı bölümlerini kırdıktan sonra tekrar çalıştı, ancak yeni bir kütüphaneyi bağladıktan sonra tekrar çökmeye başladı. Kilitlenme, herhangi bir çağrının aslında yerel kitaplığa yapılmadan önce gerçekleşir. http://pastebin.com/vW3CMXHq

iç istisnalar: Burada

Aug 23 10:33:40 Outboxs-iPod pazanga[4216] <Warning>: System.TypeInitializationException: An exception was thrown by the type initializer for Pazanga.Native.ZzPINVOKE ---> System.TypeInitializationException: An exception was thrown by the type initializer for SWIGStringHelper ---> System.ExecutionEngineException: Attempting to JIT compile method '(wrapper native-to-managed) Pazanga.Native.ZzPINVOKE/SWIGStringHelper:CreateString (intptr)' while running with --aot-only. See http://docs.xamarin.com/ios/about/limitations for more information. 
at (wrapper managed-to-native) object:__icall_wrapper_mono_delegate_to_ftnptr (object) 
at (wrapper managed-to-native) Pazanga.Native.ZzPINVOKE/SWIGStringHelper:SWIGRegisterStringCallback_Zz (Pazanga.Native.ZzPINVOKE/SWIGStringHelper/SWIGStringDelegate) 
at Pazanga.Native.ZzPINVOKE+SWIGStringHelper..cctor() [0x00017] in /Users/max/Code/pazanga/mobile/ios/bindings/ZzPINVOKE.cs:229 
--- End of inner exception stack trace --- 
at Pazanga.Native.ZzPINVOKE..cctor() [0x0000a] in /Users/max/Code/pazanga/mobile/ios/bindings/ZzPINVOKE.cs:233 
--- End of inner exception stack trace --- 
at Pazanga.Native.Zz.locate (System.Byte[] image, image_format format, Int32 width, Int32 height, Int32 x, Int32 y) [0x00009] in /Users/max/Code/pazanga/mobile/ios/bindings/Zz.cs:16 
at Pazanga.CaptureDecode.ProcessFrame (System.Byte[] data, Int32 dataWidth, Int32 dataHeight, Boolean isPicture) [0x000cf] in /Users/max/Code/pazanga/mobile/common/CaptureDecode.cs:95 
at Pazanga.iOS.CaptureViewController.HandleNewFrame (System.Byte[] data, Int32 width, Int32 height) [0x0003b] in /Users/max/Code/pazanga/mobile/ios/App/CaptureViewController.cs:128 
at Pazanga.iOS.CaptureManager.OnNewFrame (System.Byte[] array, Int32 width, Int32 height) [0x00015] in /Users/max/Code/pazanga/mobile/ios/App/CaptureManager.cs:126 
at Pazanga.iOS.CaptureManager+OutputDelegate.DidOutputSampleBuffer (MonoTouch.AVFoundation.AVCaptureOutput captureOutput, MonoTouch.CoreMedia.CMSampleBuffer sampleBuffer, MonoTouch.AVFoundation.AVCaptureConnection connection) [0x000c6] in /Users/max/Code/pazanga/mobile/ios/App/CaptureManager.cs:110 
Aug 23 10:33:40 Outboxs-iPod pazanga[4216] <Warning>: System.TypeInitializationException: An exception was thrown by the type initializer for SWIGStringHelper ---> System.ExecutionEngineException: Attempting to JIT compile method '(wrapper native-to-managed) Pazanga.Native.ZzPINVOKE/SWIGStringHelper:CreateString (intptr)' while running with --aot-only. See http://docs.xamarin.com/ios/about/limitations for more information. 
at (wrapper managed-to-native) object:__icall_wrapper_mono_delegate_to_ftnptr (object) 
at (wrapper managed-to-native) Pazanga.Native.ZzPINVOKE/SWIGStringHelper:SWIGRegisterStringCallback_Zz (Pazanga.Native.ZzPINVOKE/SWIGStringHelper/SWIGStringDelegate) 
at Pazanga.Native.ZzPINVOKE+SWIGStringHelper..cctor() [0x00017] in /Users/max/Code/pazanga/mobile/ios/bindings/ZzPINVOKE.cs:229 
--- End of inner exception stack trace --- 
at Pazanga.Native.ZzPINVOKE..cctor() [0x0000a] in /Users/max/Code/pazanga/mobile/ios/bindings/ZzPINVOKE.cs:233 
Aug 23 10:33:40 Outboxs-iPod pazanga[4216] <Warning>: System.ExecutionEngineException: Attempting to JIT compile method '(wrapper native-to-managed) Pazanga.Native.ZzPINVOKE/SWIGStringHelper:CreateString (intptr)' while running with --aot-only. See http://docs.xamarin.com/ios/about/limitations for more information. 
at (wrapper managed-to-native) object:__icall_wrapper_mono_delegate_to_ftnptr (object) 
at (wrapper managed-to-native) Pazanga.Native.ZzPINVOKE/SWIGStringHelper:SWIGRegisterStringCallback_Zz (Pazanga.Native.ZzPINVOKE/SWIGStringHelper/SWIGStringDelegate) 
at Pazanga.Native.ZzPINVOKE+SWIGStringHelper..cctor() [0x00017] in /Users/max/Code/pazanga/mobile/ios/bindings/ZzPINVOKE.cs:229 

Ve (yudum tarafından oluşturulan) SWIGStringHelper sınıftır istisna görünür:

İşte

kazadan sonra cihaz günlüğü olduğu
protected class SWIGStringHelper { 

    public delegate string SWIGStringDelegate(string message); 
    static SWIGStringDelegate stringDelegate = new SWIGStringDelegate(CreateString); 

    [DllImport("__Internal", EntryPoint="SWIGRegisterStringCallback_Zz")] 
    public static extern void SWIGRegisterStringCallback_Zz(SWIGStringDelegate stringDelegate); 

    [MonoTouch.MonoPInvokeCallback(typeof(SWIGStringDelegate))] 
    static string CreateString(string cString) { 
    return cString; 
    } 

    static SWIGStringHelper() { 
    SWIGRegisterStringCallback_Zz(stringDelegate); 
    } 
} 

Bunu nasıl çözeceğinizle ilgili herhangi bir fikir var mı?

+0

Lütfen çıktının tamamını Xamarin Studio'dan Uygulama Çıktısı ve/veya Aygıt Günlüğüne gönderin. Ana yönteminizde bir try/catch işleyicisi ekleyerek daha iyi bir mesaj yazdırabilirsiniz. Bu, bu istisnayı yakalar (ve orijinal istisnaya ulaşıncaya kadar InnerExceptions üzerinden yineleyebilirsiniz). –

+0

Teşekkürler @RolfBjarneKvinge! Cihaz kaydını ekledim. Main'da bir try/catch ile istisna yakalayamadım, işleyiciden bir şey yazmadı ve bir breakpoint de işe yaramadı. – MaxM

+0

Ana çalışma denemesi, ana iş parçasında kilitlenmediğiniz için çalışmadı, bu nedenle Ana yığınta değil. Aldığınız yığın izlemedeki yöntemlerden birini kullanarak try/catch eklemeyi deneyin (örneğin, [...]/CaptureManager.cs: 111 içinde OutputDelegate.DidOutputSampleBuffer [...]) –

cevap

2

Döngüyü kapatmak için ... bug 14194 kopyası (bir dizeyi kullanarak geri arama) olduğu ortaya çıktı. Bir statik yapıcı içinde istisna oluştuğundan, TypeInitializationExceptionTypeInitializationExceptionTypeInitializationException atıldı.

İlgili konular