2014-06-24 36 views
0

這裏是堆棧試圖JIT編譯方法例外在MonoTouch.CoreGraphics.CGContext.DrawPDFPage

System.ExecutionEngineException:試圖JIT編譯方法「(包裝管理到本機)MonoTouch.CoreGraphics.CGContext:CGContextDrawPDFPage (intptr,intptr)',同時使用--aot-only運行。有關更多信息,請參閱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] in:0 [7.1.1]

儘管我們無法在QA或單元測試中重新創建此問題,但此異常會隨機發生在AppStore分佈式安裝上。

在CGContext上

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

其中CGContextDrawPDFPage是P望着DrawPDFPage /調用功能

[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:試圖JIT編譯方法...)應該是100%可重現的。

事實並非如此,指向其他事情(可能更糟糕):某種形式的內存損壞。

但是,如果沒有某種方法(至少是隨機地)自己重現它,則幾乎不可能追蹤到。

我最初的建議是試圖找出是否有在所有的東西,你可以爲了搞清楚才能夠創建測試用例自己:

  • 是否只發生在特定組設備(例如只有iPad 2)?
  • 這是否僅適用於某些客戶(例如冰島客戶)?
  • 每次都是異常完全一樣,還是P/Invoke /堆棧跟蹤有所不同?
  • 這是低內存條件嗎?在這種情況發生之前,應用程序是否獲得了內存警告?
  • 在您的應用程序中是否有任何必需的步驟(即,如果用戶執行X + Y它可能會崩潰,但是如果他執行Y + X,那麼它從不崩潰)?
+0

堆棧跟蹤可能有所不同,但始終在CGContext中的P/Invoke調用上。 例如,在MonoTouch.CoreGraphics.CGContext.SetRenderingIntent(CGColorRenderingIntent意圖)[0x00000]在<文件名未知>:0 在Neva.PdfViewer.PageContentView.Draw(MonoTouch.CoreGraphics.CGContext上下文)[0x00000]在<文件名未知>:0 at Neva.PdfViewer.PageContentTile.DrawInContext(MonoTouch.CoreGraphics.CGContext ctx)[0x00000] in :0 [7.1] – alecd4