运行DSharp示例时出现错误信息

时间:2015-12-02 01:22:28

标签: delphi delphi-xe

我在Delphi XE中安装了所有Dsharp软件包。但是,当我运行该示例时,我总是收到以下错误消息:

  

例外:修补:ObjAuto.GetTypeSize失败。你在方法中设置了一个断点吗?

是否有人为此错误找到了解决方法?

enter image description here

1 个答案:

答案 0 :(得分:6)

该库正在尝试应用运行时代码补丁来修复ObjAuto.GetTypeSize RTL函数中的缺陷。可以在此处看到执行此操作的代码:https://bitbucket.org/sglienke/dsharp/src/ad7c5983505f0117f1347f92d2bb96c07bdfda94/Source/Core/ObjAutoPatch.pas?at=master&fileviewer=file-view-default

FindMethodBytes的调用失败。因为此函数即将修改执行代码以安装运行时补丁,所以它首先检查代码是否符合预期。它搜索代码,寻找该功能的已知签名。

无法找到该签名,因此无法安装补丁。因此错误消息。修补程序代码以这种方式失败的一些可能原因:

  1. 在此代码中设置断点。通过临时修改代码以包含断点指令来实现断点。
  2. 您正在编译和链接您自己的RTL修改版本。因此,功能签名是不同的。
  3. 程序中的另一个单元也修补了同样的功能,第二次修补尝试失败的原因很明显。
  4. 您正在使用与标准DCU具有不同签名的调试DCU。
  5. DSharp代码中存在缺陷。也许是一个错误的签名,没有在您的Delphi RTL版本上进行测试。那不太可能。也许您已经安装了未经Stefan测试的修补程序或Delphi更新。或者您可能尚未安装预期已安装的修补程序或更新。也许链接器剥离了很多代码(或者很少),签名搜索失败了。
  6. 问题可能是由于我还没有想到的其他原因。但从根本上说,这些都是同一主题的变种。运行时遇到的代码不符合预期。我建议您尝试找出原因,以便确定最佳方法。

    鉴于此消息有很多可能的原因,我只是试图解释它的概念原因,但现在你真的要调试环境中的细节。