Xamarin iOS在加载大型本机库时引发System.TypeInitializationException

Xamarin iOS在加载大型本机库时引发System.TypeInitializationException,exception,xamarin.ios,Exception,Xamarin.ios,我有一个用Xamarin iOS构建的iOS应用程序,当加载具有用于PInvoke调用的DllImport属性的类时崩溃。例外情况是: Unhandled managed exception: An exception was thrown by the type initializer for Pazanga.Native.ZzPINVOKE (System.TypeInitializationException) 该应用程序运行良好,但随着本机库的增大,它开始崩溃。裁剪库的某些部分后,它再

我有一个用Xamarin iOS构建的iOS应用程序,当加载具有用于PInvoke调用的DllImport属性的类时崩溃。例外情况是:

Unhandled managed exception: An exception was thrown by the type initializer for Pazanga.Native.ZzPINVOKE (System.TypeInitializationException)
该应用程序运行良好,但随着本机库的增大,它开始崩溃。裁剪库的某些部分后,它再次工作,但在链接新库后,它又开始崩溃。崩溃发生在实际调用本机库之前

以下是崩溃后的设备日志:

内部例外情况如下:

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

关于如何解决这个问题有什么想法吗?

要结束循环。。。它原来是(使用字符串的反向回调)的副本


由于异常发生在静态构造函数中,因此引发了
TypeInitializationException

请在Xamarin Studio的应用程序输出和/或设备日志中发布完整的输出。通过在Main方法中添加try/catch处理程序,您可能可以打印出更好的消息,该处理程序将捕获此异常(并且您可以在InnerExceptions上迭代,直到到达原始异常)。谢谢@RolfBjarneKvinge!我添加了设备日志。我无法用try/catch-in-Main捕获异常,它没有打印处理程序中的任何内容,断点也不起作用。try/catch-in-Main不起作用,因为你没有在主线程中崩溃,所以Main不在堆栈中。尝试在堆栈跟踪中的一个方法中添加Try/catch(例如[…]/CaptureManager.cs:111中的OutputDelegate.DidOutputSampleBuffer[…])@RolfBjarneKvinge再次感谢。我捕获了异常,它提到了aot编译器的问题。但是我在限制文件上没有发现任何可能导致问题的东西。奇怪的是,对本机库的看似无关的更改导致了崩溃。这看起来像个bug。你能在这里用一个测试项目提交一个bug吗?
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);   
  } 
}