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

Posted

技术标签:

【中文标题】尝试在 MonoTouch.CoreGraphics.CGContext.DrawPDFPage 中 JIT 编译方法异常【英文标题】:Attempting to JIT compile method exception in MonoTouch.CoreGraphics.CGContext.DrawPDFPage 【发布时间】:2014-06-24 15:18:59 【问题描述】:

这是堆栈

System.ExecutionEngineException:在使用--aot-only 运行时尝试 JIT 编译方法 '(wrapper managed-to-native) MonoTouch.CoreGraphics.CGContext:CGContextDrawPDFPage (intptr,intptr)'。请参阅http://docs.xamarin.com/ios/about/limitations 了解更多信息。

在 MonoTouch.CoreGraphics.CGContext.DrawPDFPage(MonoTouch.CoreGraphics.CGPDFPage 页面)[0x00000] in :0 在 Neva.PdfViewer.PageContentView.Draw (MonoTouch.CoreGraphics.CGContext 上下文) [0x00000] 中:0 在 Neva.PdfViewer.PageContentTile.DrawInContext (MonoTouch.CoreGraphics.CGContext 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 上面的链接并不是很有帮助。

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

【问题讨论】:

【参考方案1】:

这个异常(System.ExecutionEngineException: Attempting to JIT compile method ...)应该是 100% 可重现的。

事实并非如此,这指向了其他问题(可能更糟):某种内存损坏。

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

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

它是否只发生在特定的一组设备上(例如仅 iPad 2)? 是否仅针对特定客户群(例如仅冰岛的客户)发生? 异常是否每次都完全相同,还是 P/Invoke/堆栈跟踪不同? 这是内存不足的情况吗?应用在发生这种情况之前是否收到内存警告? 您的应用中是否有任何必需的步骤(即如果用户执行 X+Y 可能会崩溃,但如果他执行 Y+X 则永远不会崩溃)?

【讨论】:

堆栈跟踪可能会有所不同,但始终在 CGContext 中的 P/Invoke 调用上。例如,在 MonoTouch.CoreGraphics.CGContext.SetRenderingIntent (CGColorRenderingIntent intent) [0x00000] in :0 at Neva.PdfViewer.PageContentView.Draw (MonoTouch.CoreGraphics.CGContext context) [0x00000] in : 0 在 Neva.PdfViewer.PageContentTile.DrawInContext (MonoTouch.CoreGraphics.CGContext ctx) [0x00000] in :0 [7.1]

以上是关于尝试在 MonoTouch.CoreGraphics.CGContext.DrawPDFPage 中 JIT 编译方法异常的主要内容,如果未能解决你的问题,请参考以下文章

尝试在java中的socket客户端程序中捕获多次尝试

Break 在有资源的尝试中不起作用,但在没有资源的尝试中起作用

尝试连接时“尝试在不是套接字的东西上进行操作”

尝试在 Swift 3 中保存自定义对象时尝试插入非属性列表对象

在 Flutter 中限制登录尝试?

尝试在批处理环境中执行 REXX 或 TSO 命令时尝试绕过错误