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

时间:2017-02-11 14:40:44

标签: c++ qt qt-creator

我们是否可以列出导致程序在调试模式下编译时正常运行但在发布模式下使用Qt Creator崩溃的原因列表。在大多数情况下,让我们进行一般性的讨论。

就我而言,在A点,程序编译并正确运行。经过一些工作,在B点,它编译但在运行时在发布模式而不是在调试模式下崩溃,我通过在A和B之间评论我的工作返回到A点,它具有与B点相同的行为,它编译但崩溃仅在发布模式下。我认为在A点睡觉前我做了很多错误。它让我不想完成我的程序,因为它是一个我想在开源中分享的免费程序。

1 个答案:

答案 0 :(得分:1)

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

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

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

否则,最好的办法是做一些像"二元搜索"在你的代码上找到崩溃的确切位置。比如,评论一半代码,看它是否仍然崩溃等等。

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