我将一个项目从Qt4迁移到Qt5,它编译并且除了应用程序之外的所有内容在它到达主函数之前崩溃。我知道有一个空值可以在某些时候弄乱某些东西,可能是一个无法找到的文件或者其他东西,但是有很多.cpps和.h以及库很难找到错误的来源加上我不能设置任何断点。我有很多调试数据,所以也许你们中的任何一个都可以指导我正确的方向。我不知道在没有堆栈溢出的情况下我会做什么,所以提前谢谢。
调试时遇到不同的崩溃:
每种情况下的堆栈显示不同的崩溃,但它们都有一些共同点,就是这个 __ do_global_ctors ,我已经研究过,显然它与构造函数有关,但我没有想法我应该寻找什么。
如果我错过了任何信息,请询问。我希望有人能够启发我,我非常接近这一点。
答案 0 :(得分:1)
在__do_global_ctors()
之前调用main()
,因为框架需要实例化main()
可能使用的所有全局对象。
此方法将为所有静态对象及其组件对象调用构造函数。即所有静态构造函数。
从堆栈跟踪的外观看,似乎在构造QGlobalStatic<QMutex, [incomlpete types - see trace for details]>
对象期间发生了段错误,这是有道理的。这是qRegisterResourceData
qInitResources_mimetypes
的一部分构建的。
尝试在qrc_mimetypes.cpp中的此函数中放置断点(如果您有源代码)并查看它的位置。或者查看有关mimetypes初始化的Qt文档,并确保已正确指定应用程序的资源。
答案 1 :(得分:0)
我设法通过仔细地将所有库重新编译到Qt5并确保程序引用的所有cpps也是Qt5来解决问题。还要仔细检查链接。我以为我做过了,但显然我错过了一个图书馆。
请注意,某些库需要迁移,还有其他库可以直接使用Qt5下载和编译。如果您遇到同样的问题,请确保在自己迁移之前没有该库的Qt5版本。