System.ExecutionEngineException: Attempting to JIT compile method only in Debug Mode on device (MonoTouch)

青春壹個敷衍的年華 提交于 2019-12-10 13:24:22

问题


I have the following method:

ApiResponse<T> PostMultipart<T>(string uploadUrl, NameValueCollection formParamters, params UploadFile[] uploadFiles);

UploadFile is just a Poco:

public class UploadFile
{
    public string FilePath { get; set; }
    public string ContentType { get; set; }
    public string ParameterName { get; set; }
}

By calling that method, everyhing works fine on the simulator with "Debug|iPhoneSimulator" and on my iPod Touch with iOS 5.1.1 with "Release|iPhone".

But when I am starting to debug the app on the device ("Debug|iPhone"), I get the following exception:

System.ExecutionEngineException: Attempting to JIT compile method 'Xyz.Api.ApiClient:PostMultipart (string,System.Collections.Specialized.NameValueCollection,Xyz.Api.UploadFile[])' while running with --aot-only. See http://docs.xamarin.com/ios/about/limitations for more information.

I can't see any relevant information on the linked page. And I can't really understand why that behaviour only occurs when debugging on the phone.

Is someone else able to understand what is going on here? :)


回答1:


Your code sample is not complete enough (to duplicate) but this is most likely because your <T> is a value-type (e.g. int, enum...).

The AOT compiler has difficulties generating code for value-types where code cannot be shared (like it can for any reference type). Workaround includes:

  • hinting the AOT compiler of what you need (ensuring <T> is known and code is generated for the value types you're using);

  • using a reference type (e.g. a string) instead of a value type (e.g. an int)

And I can't really understand why that behaviour only occurs when debugging on the phone.

iOS devices do not allow JITting code (Apple's restriction) so AOT is used. The iOS simulator does not have this restriction, so the JIT is used (because it's a lot faster than AOTing code).



来源:https://stackoverflow.com/questions/12837517/system-executionengineexception-attempting-to-jit-compile-method-only-in-debug

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!