【问题标题】:Detecting JITs at compile time in MonoTouch在 MonoTouch 中编译时检测 JIT
【发布时间】:2012-03-25 07:40:30
【问题描述】:

我正在为一个相当大的 MonoTouch 应用程序构建系统,该应用程序使用了许多跨平台组件。结果,我们经常遇到这样一种情况,其中一个跨平台组件执行了一些无法编译的操作。如果实际执行了某些操作,则设备构建将崩溃。那时,我们必须追踪崩溃发生的位置,找到有问题的方法,并将其破解,这样它就不会尝试在 MonoTouch 构建中进行 JIT。

我的问题是,有没有办法在构建过程中检测到这些东西?起初,我们有一个正则表达式试图检测通用虚拟方法,但某些类型的 LINQ 和 lambdas 也会尝试 JIT,我宁愿不尝试编写自己的解析器来检测它们全部。我试过使用monodis AssemblyName.dll,它会给我很多缺失的方法错误,但它们中的大多数似乎是无害的——即使它们不是,它也不会告诉我对所说方法的引用在哪里以便我可以看到需要做什么。最重要的是,有时它会在程序集结束之前与Abort trap: 6Bus error: 10 一起崩溃,这非常无益。有没有更好的方法可以检测构建过程中的 JIT 尝试?

【问题讨论】:

    标签: c# .net xamarin.ios jit aot


    【解决方案1】:

    我的问题是,有没有办法在构建过程中检测到这些东西?

    没有。当在本机可执行文件中找不到某些内容时,使用 JIT(或更准确地说是它尝试使用 JIT 的异常)是运行时回退。

    使用您自己的工具(甚至可以是Gendarme 规则)检测(部分/大部分)导致异常的条件并非不可能(也不容易)。然而,这是一个移动目标,因为我们正在修复reported 问题,因此您必须使用每个新版本更新您的工具(或者冒着花费时间修复不再是问题的风险)。

    真正有帮助的(无论有没有您自己的工具)是报告此类问题,以便可以跟踪它们并成为 Xamarin 测试套件的一部分。

    我尝试过使用 monodis AssemblyName.dll

    monodis 需要访问所有程序集引用,否则它将无法工作(并且可能崩溃)。

    【讨论】:

    • 关于这个移动目标...我们的印象是,不支持诸如泛型虚拟方法之类的东西,因为它们不支持。那是可以改变的吗?我们可以报告应该有效但无效的事情;麻烦的是那些永远不会起作用的东西。
    • 就我个人而言,我不知道(除了编译所有可能性)如何解决它(但其他人正在查看问题。所以有疑问你最好填写一个错误报告 - 更糟糕的是它会被关闭作为现有副本的副本。
    【解决方案2】:

    在“检测”部分:当您找出导致问题的构造时,创建 FxCop 自定义规则来检测它并在正常程序集上运行它。这样您就不需要编写自己的解析器了。

    链接:FxCop - http://msdn.microsoft.com/en-us/library/bb429476%28v=VS.80%29.aspx FxCop 操作方法的自定义规则:http://www.codeproject.com/Articles/30666/7-Steps-to-Write-Your-Own-Custom-Rule-using-FXCOP

    【讨论】:

    • 如果我没记错的话,FxCop 是一个仅限 Windows 的工具,因此对我们不可用。即使在 Mono 中使用了一些类似的工具,问题更多的是有许多结构可以导致这种情况发生,我们还不知道它们都是什么,所以我们仍然可能会错过一些使用类似 FxCop 的方法。
    • 据我所知是的。应该知道 monotouch=="your source platform is not Windows"。 (此外,“如何检测编译器是否能在特定源上成功运行”的问题通常是一个难题 (en.wikipedia.org/wiki/Halting_problem) :),因此发现问题然后检测源中的特定问题可能是更安全的方法。
    • 这可能比停止问题更容易,因为尝试调用未提前编译的方法应该(理论上)与之前的方法不同,至少在某种意义上后者会有代码,而前者没有代码。只需进行这样的比较即可。理想情况下,我们可以在生成的 IL 代码中找到某种危险信号。
    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 2011-04-05
    • 2011-06-29
    • 1970-01-01
    • 2022-10-14
    • 2013-09-04
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多