首先这种情况大概的原因有
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的区别可以看这个