一般来说,使用Qt Creator,是什么导致程序在调试模式下编译时正确运行,但在发布模式下崩溃

In general, with Qt Creator, what can cause a program to run correctly when compiled in debug mode but to crash in release mode?

本文关键字:模式 运行 布模式 崩溃 程序 是什么 Qt 调试 编译 一般来说 使用      更新时间:2023-10-16

我们能用Qt Creator列出一个原因列表吗?这些原因使程序在调试模式下编译时正确运行,但在发布模式下崩溃。在大多数情况下,让我们笼统地谈谈。

在我的情况下,在A点,程序编译并正确运行。经过一些工作,在B点,它进行了编译,但在发布模式下运行时崩溃,而不是在调试模式下,我通过在A和B之间注释我的工作返回到A点,它的行为与B点相同,它进行编译,但仅在发布模式中崩溃。我认为这是我在a点之前犯的一个错误。这让我不想完成我的程序,因为这是一个我想在开源中共享的免费程序。

任何未定义的行为都可能导致此类问题。最可能的原因是写入超过数组/向量的边界,或者从那里读取。它可以是对已经被破坏的对象的破坏。或者多线程问题,只有在发布模式下执行速度快时才会再现。它可能是未初始化的结构,或者是在构造函数中未分配给的POD类型的字段。

在调试模式下,内存的分配方式不同,在某些情况下,可能最终包含零(当传递给程序时),而不是随机垃圾。这通常只会在Release模式下导致崩溃。

我强烈建议您设置"RelWithDebInfo"配置来调试此问题,例如在Release中构建时将-g选项传递给GCC。因此,当应用程序崩溃时,您将能够在调试器中停止并确定原因。

否则,最好的办法是对代码进行"二进制搜索",以找到崩溃的确切位置。比如,评论一半的代码,看看它是否仍然崩溃,等等

我知道这个解释有点含糊,但希望它能有所帮助!