2013-08-21 17 views
5

Tôi có một ứng dụng iOS được xây dựng với Xamarin iOS bị treo khi tải lớp có thuộc tính DllImport cho các cuộc gọi PInvoke. Trường hợp ngoại lệ là:Xamarin iOS ném System.TypeInitializationException khi tải một thư viện gốc lớn

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

Ứng dụng hoạt động tốt, nhưng bắt đầu gặp lỗi khi thư viện gốc tăng kích thước. Sau khi cắt xén một số phần của thư viện, nó đã hoạt động trở lại, nhưng sau khi liên kết một thư viện mới, nó lại bắt đầu gặp sự cố. Sự cố xảy ra trước khi bất kỳ cuộc gọi nào thực sự được thực hiện đối với thư viện gốc.

Đây là nhật ký thiết bị sau khi vụ tai nạn: http://pastebin.com/vW3CMXHq

Các trường hợp ngoại lệ bên trong là:

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 

Và đây là lớp SWIGStringHelper (tạo ra bởi SWIG) xuất hiện trong ngoại lệ:

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); 
    } 
} 

Bất kỳ ý tưởng nào về cách giải quyết vấn đề này?

+0

Vui lòng đăng đầu ra hoàn chỉnh trong Đầu ra ứng dụng và/hoặc Nhật ký thiết bị từ Xamarin Studio. Bạn có thể in một thông báo tốt hơn bằng cách thêm một trình xử lý try/catch vào phương thức Main của bạn, nó sẽ bắt ngoại lệ này (và bạn có thể lặp lại trên InnerExceptions cho đến khi bạn đạt được ngoại lệ ban đầu). –

+0

Cảm ơn @RolfBjarneKvinge! Tôi đã thêm nhật ký thiết bị. Tôi không thể bắt được ngoại lệ với một thử/bắt trong chính, nó đã không in bất cứ thứ gì từ người xử lý, và một điểm dừng cũng không hoạt động. – MaxM

+0

Thử/nắm bắt trong Main không hoạt động vì bạn không gặp sự cố trong chuỗi chính, vì vậy Chính không nằm trong ngăn xếp. Hãy thử thêm một try/catch vào một trong các phương thức trong stack trace bạn nhận được (OutputDelegate.DidOutputSampleBuffer [...] trong [...]/CaptureManager.cs: 111 chẳng hạn) –

Trả lời

2

Để đóng vòng lặp ... Nó hóa ra là một bản sao của bug 14194 (gọi ngược lại bằng cách sử dụng một chuỗi).

A TypeInitializationException bị ném vì ngoại lệ xảy ra bên trong một hàm tạo tĩnh.

Các vấn đề liên quan