这是堆栈
系统。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,那么它永远不会崩溃)?