QtCreator 运行项目,在debug下正常运行.在release下运行崩溃

首先这种情况大概的原因有

1、有未初始化的变量

2、有野指针(比如没有赋值的指针,析构的时候没有赋空的指针)

3、有函数没有写return(在debug下是会默认补全return的!)

4、析构逻辑顺序错误(我就是这个问题)

但是我怎么也找不到到底什么问题导致崩溃,指针都没有空,函数return感觉也不是问题。

解决方法:

在Release下面让Debug可以断点调试,这个方法只能是手动打断点,但是如果崩溃了是不会跳到具体崩溃的地方的。还是要自己慢慢调。

# release断点调试
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO

最后,通过一步步调,我发现,我的代码在release下崩溃的原因是因为析构顺序的错误。

QtCreator 运行项目,在debug下正常运行.在release下运行崩溃_第1张图片

例如说,我生成A,由A生成B,B在生成C。A是一个弹框,B是一个弹框,C是B的内容。

当B被关闭的时候给A一个关闭信号,让A删除B,然后B析构的时候删除C。就成了上面的析构顺序。

正确的析构逻辑应是B被关闭后,先析构C,再让A析构B。即3-1-2。

所以我把B在窗口关闭时要发送的信号移到了析构里,在删除C后再发送,问题就解决了。


Release和Debug的区别可以看这个

深入了解Debug和Release的区别 - Love简 - 博客园 (cnblogs.com)

你可能感兴趣的:(QT,qt,bug)