如何在 C++Builder 发布模式下找到异常,但不是调试

Posted

技术标签:

【中文标题】如何在 C++Builder 发布模式下找到异常,但不是调试【英文标题】:How to find exception in C++Builder Release mode, but not Debug 【发布时间】:2021-06-29 17:00:10 【问题描述】:

C++Builder v10.4.2,CLang 64位编译器 发布模式下的浮点错误,但调试中没有。当一个特定的图形被调用,一个特定的用户文件在模拟中运行时,就会发生这种情况。这在过去发生过(不同的用户文件,相同的图形模块),消失了,现在重新出现。通过注释掉代码进行故障排除会产生无意义的结果,表明问题发生在其他地方 - 而不是在图形模块中。

把我逼疯了。

C++Builder 中是否有任何工具/开关/等我可以用来在发布模式下暴露问题?

还有其他故障排除建议吗?

跟进:我将相同的源文件放入 C++Builder 10.2.3 中,重新构建,它运行没有错误。 重新安装了 10.4.2 和第三方工具,从头开始重建项目,仍然得到相同文件的相同错误。请注意,该项目涉及使用 std::complex 值的计算,如果这可能相关的话。 讨厌放弃 10.4.2(真的很喜欢 TwineCompile),但这显然是不可接受的。

谢谢

【问题讨论】:

当涉及到浮点错误时,C++Builder/Delphi 中的 RTL 有一些非常奇怪的异常处理。看看SetExceptionMask()Set8087CW() 等内容。 我能够让调试器至少给出一个线索:它在 0x00f5c4da 处给出了一个类 $C0000090 浮点无效操作,它把我带到了 CPU 视图——这对我来说毫无意义.有时它会给出除以零的错误。我应该补充一点,这发生在 32 位和 64 位中,并且只有在 C++Builder 10.4.2 v10.2.3 中才能正常工作。 【参考方案1】:

您可以尝试madExcept 或Eurekalog,我相信两者都有免费试用。

【讨论】:

以上是关于如何在 C++Builder 发布模式下找到异常,但不是调试的主要内容,如果未能解决你的问题,请参考以下文章

C++Builder 10.4:如何关闭缩进线?

虚拟内存地址空间不足(Borland C++ Builder 6 程序)

使用 Interface Builder 编辑 UITableViewCell 的模式

建造者(Builder)模式

今日社区发布 | 双模IT趋势下如何更好地构建微服务架构——IBM Microservice Builder解决方案正式发布

C++Builder建造者模式详解--设计模式