我在Delphi XE中安装了所有Dsharp软件包.但是,当我运行该示例时,我总是收到以下错误消息:
例外:修补:ObjAuto.GetTypeSize失败.你在方法中设置了断点吗?
有没有人找到这个错误的解决方法?
该库正在尝试应用运行时代码补丁来修复ObjAuto.GetTypeSize
RTL函数中的缺陷.执行此操作的代码可以在这里看到:https://bitbucket.org/sglienke/dsharp/src/ad7c5983505f0117f1347f92d2bb96c07bdfda94/Source/Core/ObjAutoPatch.pas?at=master&fileviewer=file-view-default
呼叫FindMethodBytes
失败.因为此函数即将修改执行代码以安装运行时补丁,所以它首先检查代码是否符合预期.它搜索代码,寻找该功能的已知签名.
无法找到该签名,因此无法安装补丁.因此错误消息.修补程序代码以这种方式失败的一些可能原因:
在此代码中设置断点.通过临时修改代码以包含断点指令来实现断点.
您正在编译和链接您自己的RTL修改版本.因此,功能签名是不同的.
程序中的另一个单元也修补了同样的功能,第二次修补尝试失败的原因很明显.
您正在使用与标准DCU具有不同签名的调试DCU.
DSharp代码中存在缺陷.也许是一个错误的签名,没有在您的Delphi RTL版本上进行测试.那不太可能.也许您已经安装了未经Stefan测试的修补程序或Delphi更新.或者您可能尚未安装预期已安装的修补程序或更新.也许链接器剥离了很多代码(或者很少),签名搜索失败了.
问题可能是由于我还没有想到的其他原因.但从根本上说,这些都是同一主题的变种.运行时遇到的代码不符合预期.我建议您尝试找出原因,以便确定最佳方法.
鉴于此消息有很多可能的原因,我只是试图解释它的概念原因,但现在你真的要调试环境中的细节.