试图在MonoTouch.CoreGraphics.CGContext.DrawPDFPage中JIT编译方法异常



这是堆栈

系统。MonoTouch.CoreGraphics. ExecutionEngineException:尝试JIT编译方法(wrapper managed-to-native)。CGContext:CGContextDrawPDFPage (intptr,intptr)',同时运行——aot-only。详见http://docs.xamarin.com/ios/about/limitations

在MonoTouch.CoreGraphics. cgcontext . drawpdfpage (MonoTouch.CoreGraphics. cgcontext . drawpdfpage)CGPDFPage page) [0x00000] in:0绘制MonoTouch.CoreGraphics。CGContext context) [0x00000] in:0MonoTouch.CoreGraphics. drawwincontextCGContext ctx) [0x00000] in:0 [7.1.1]

虽然我们无法在QA或单元测试中重现此问题,但此异常在AppStore分布式安装中随机发生。

查看CGContext中的DrawPDFPage

    public void DrawPDFPage (CGPDFPage page)
    {
        CGContext.CGContextDrawPDFPage (this.handle, page.handle);
    }

其中CGContextDrawPDFPage是一个p/Invoke函数

    [DllImport ("/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics")]
    private static extern void CGContextDrawPDFPage (IntPtr c, IntPtr page);

没有给我们任何提示。上面的链接http://docs.xamarin.com/ios/about/limitations并不是很有帮助。

我的问题是,是什么导致了这样的异常?调试和修复它的步骤是什么?

此例外(System。ExecutionEngineException: trying to JIT compile method…)应该是100%可复制的。

事实上,它不是,指向其他的事情(可能更糟):某种类型的内存损坏。

然而,如果没有某种方法(至少是随机的)自己复制它,几乎不可能追踪到它。

我最初的建议是试着弄清楚是否有什么你能弄清楚的,以便能够自己创建一个测试用例:

  • 它是否只发生在特定的设备上(例如只有iPad 2)?
  • 它是否只发生在特定的一组客户(仅在冰岛的客户为例)?
  • 每次异常完全相同,还是P/Invoke/stack跟踪不同?
  • 是低内存状态吗?在此发生之前,应用程序是否获得内存警告?
  • 你的应用程序中是否有任何必要的步骤(例如,如果用户执行X+Y,它可能会崩溃,但如果他执行Y+X,那么它永远不会崩溃)?

最新更新