这是堆栈

System.ExecutionEngineException:尝试在仅--aot运行时,JIT编译方法“(将包装器托管到本地)MonoTouch.CoreGraphics.CGContext:CGContextDrawPDFPage(intptr,intptr)”。有关更多信息,请参见http://docs.xamarin.com/ios/about/limitations

在MonoTouch.CoreGraphics.CGContext.DrawPDFPage(MonoTouch.CoreGraphics.CGPDFPage页面)的[0x00000]中:: 0
  在Neva.PdfViewer.PageContentView.Draw(MonoTouch.CoreGraphics.CGContext上下文)中的[0x00000]在:0中
  在Neva.PdfViewer.PageContentTile.DrawInContext(MonoTouch.CoreGraphics.CGContext ctx)[0x00000]在:0 [7.1.1]中

虽然我们无法在质量检查或单元测试中重现此问题,但此异常在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:尝试JIT编译方法...)应该是100%可重现的。

事实并非如此,这意味着其他事情(可能更糟):某种形式的内存损坏。

但是,如果没有某种方法(至少是随机地)自己复制,则几乎无法追踪。

我最初的建议是尝试找出是否可以解决所有问题,以便自己创建测试用例:


它仅在某些设备上发生(例如,仅iPad 2)吗?
它是否仅针对特定的一组客户(例如仅冰岛的客户)发生?
每次例外是否完全相同,还是P / Invoke /堆栈跟踪有所不同?
它是低内存状况吗?在此之前,应用程序是否收到了内存警告?
您的应用程序中是否有任何必要的步骤(即,如果用户执行X + Y,则可能会崩溃,但是如果用户执行Y + X,则它绝不会崩溃)?

关于ios - 尝试在MonoTouch.CoreGraphics.CGContext.DrawPDFPage中进行JIT编译方法异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24390408/

10-09 22:08