尝试在 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以上是关于尝试在 MonoTouch.CoreGraphics.CGContext.DrawPDFPage 中 JIT 编译方法异常的主要内容,如果未能解决你的问题,请参考以下文章
Break 在有资源的尝试中不起作用,但在没有资源的尝试中起作用