首先这种情况大概的原因有
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下崩溃的原因是因为析构顺序的错误。

例如说,我生成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的区别可以看这个
本文讲述了程序崩溃的可能原因,如未初始化变量、野指针和析构逻辑错误。作者通过在Release模式下使用断点调试,发现是由于析构顺序不正确导致的。最终通过调整信号传递时机解决了问题,强调了Debug与Release模式的区别在调试中的应用。
8533

被折叠的 条评论
为什么被折叠?



