一般来说,使用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 Creator列出一个原因列表吗?这些原因使程序在调试模式下编译时正确运行,但在发布模式下崩溃。在大多数情况下,让我们笼统地谈谈。
在我的情况下,在A点,程序编译并正确运行。经过一些工作,在B点,它进行了编译,但在发布模式下运行时崩溃,而不是在调试模式下,我通过在A和B之间注释我的工作返回到A点,它的行为与B点相同,它进行编译,但仅在发布模式中崩溃。我认为这是我在a点之前犯的一个错误。这让我不想完成我的程序,因为这是一个我想在开源中共享的免费程序。
任何未定义的行为都可能导致此类问题。最可能的原因是写入超过数组/向量的边界,或者从那里读取。它可以是对已经被破坏的对象的破坏。或者多线程问题,只有在发布模式下执行速度快时才会再现。它可能是未初始化的结构,或者是在构造函数中未分配给的POD类型的字段。
在调试模式下,内存的分配方式不同,在某些情况下,可能最终包含零(当传递给程序时),而不是随机垃圾。这通常只会在Release模式下导致崩溃。
我强烈建议您设置"RelWithDebInfo"配置来调试此问题,例如在Release中构建时将-g
选项传递给GCC。因此,当应用程序崩溃时,您将能够在调试器中停止并确定原因。
否则,最好的办法是对代码进行"二进制搜索",以找到崩溃的确切位置。比如,评论一半的代码,看看它是否仍然崩溃,等等
我知道这个解释有点含糊,但希望它能有所帮助!
相关文章:
- 可视化C++:发布模式的运行时库作为'Multi-threaded Debug DLL'
- 如何检测窗口当前是否正在运行模式对话框?
- 在调试模式下,所有程序都运行良好,但在发布模式下,我在cudaMalloc操作中出错
- 多线程程序卡在优化模式下,但在 -O0 中正常运行
- 如何在调试模式下通过终端运行可执行的 c++?
- 我在发布模式下运行时收到"Access violation reading location"错误 - C++
- C++单例模式代码无法运行,不知道为什么?
- 在CLION中调试模式和运行模式之间的怪异结果
- 如何创建一个新过程,而没有从管理模式运行的MFC应用程序中的管理特权
- 如何在单线模式下强制ROS运行
- 一般来说,使用Qt Creator,是什么导致程序在调试模式下编译时正确运行,但在发布模式下崩溃
- 在Visual Studio C 调试模式中捕获异常的最佳方法仅在从IDE运行时才会发生
- 64位VC 程序似乎在32位模式下运行
- 在非调试模式下运行代码时出现问题
- C++Win32 在低优先级模式下运行应用程序/线程
- GCC 在调试模式下崩溃,在发布模式下运行良好
- 可以从命令行运行C++代码,但不能从visual studio中的调试模式运行
- 在Visual Studio 2015中以C++98模式运行项目
- 在windows 7中用非管理模式运行的应用程序编写日志文件
- 设计模式- c++运行时成员参数的实例化