Clang 从C+迁移旧项目+;Builder 10.2至10.2.3在运行时崩溃

Clang 从C+迁移旧项目+;Builder 10.2至10.2.3在运行时崩溃,clang,c++builder,c++builder-10.2-tokyo,Clang,C++builder,C++builder 10.2 Tokyo,我很难将旧的C++Builder 10.2项目升级到10.2.3(我们正在64位PC上使用32位的Clang编译器) 10.2.3安装顺利(在干净的Windows 10 PC上),-项目编译和链接-到目前为止,每个人都很高兴 但是,当在调试器中运行应用程序时,我可以看到MainForm的this指针(由于历史原因,是一个相当大的对象)在单个方法调用中突然变成垃圾(当调用它自己的方法时-就在构造函数完成之后),这导致了一个严重的失败 我尝试注释掉特定方法的\uuuu fastcall调用约定,然后

我很难将旧的C++Builder 10.2项目升级到10.2.3(我们正在64位PC上使用32位的Clang编译器)

10.2.3安装顺利(在干净的Windows 10 PC上),-项目编译和链接-到目前为止,每个人都很高兴

但是,当在调试器中运行应用程序时,我可以看到MainForm的
this
指针(由于历史原因,是一个相当大的对象)在单个方法调用中突然变成垃圾(当调用它自己的方法时-就在构造函数完成之后),这导致了一个严重的失败

我尝试注释掉特定方法的
\uuuu fastcall
调用约定,然后调试器再进一步,但由于
指针损坏,在使用
\uuu fastcall
的下一次方法调用中崩溃(我们有1000多个带有
\uuu fastcall
的方法,因此不能对它们全部进行注释)

有人知道发生了什么事吗

一个新的编译器开关,也许

大型对象的问题


我还尝试在10.2.3中从头开始构建一个全新的项目,但没有成功,同样的奇怪事情发生了。

这是Clang编译器中的一个已知错误,已经向Embarcadero报告:

10.2.3 Tokyo中的Clang编译器补丁可在Embarcadero的CodeCentral上获得:


如果没有与所用技术相关的代码或任何描述,就不可能模拟行为或调试。如果您从头开始创建新应用,可能会出现崩溃,您应该共享其代码。此外,您是否确定旧编译的应用正在新的windows安装上运行(过去有问题,实际上是较新的windows update/version而不是新的编译器导致了问题)?在32位
\uuu fastcall
中,
这个
指针携带在
EAX
cpu寄存器中。使用调试器在每次
\uu fastcall
方法调用期间准确地找出是什么损坏了该寄存器。听起来可能clang编译器没有正确设置调用堆栈。您在C++中使用的是C++11吗ODE?如果不是,试着切换到遗留的Borland编译器,看看是否出现了同样的问题(不应该)。Hi Remy -谢谢你的回答。因为我们大量使用现代C++(切换到CLAN的主要原因),切换回经典编译器是不可能的。。我将尝试调试并遵循EAX CPU寄存器closely@Spektre:是的,在10.2下编译时,我们相当旧的代码库运行良好,没有任何问题。我们在调试器方面遇到了一些困难,这就是为什么我们现在尝试升级到10.2.3。在Windows 7和10 PC上都可以看到“this”指针问题。结论是:“\u chks”TK’在102.3解决方案中崩溃堆栈帧:避免在堆栈上放置“大”对象/数组-而不是考虑使用堆存储,而不是使用新的、STD::SydDypPTR、STD::UnQuyjpTR,等等……好吧,如果你知道该寻找什么,那么你的问题可能会有一个答案/结论:-)