QT 5.9.1应用调用QApplication构造函数崩溃,有哪些调试方法?
环境配置排查
- 先确认Qt 5.9.1的编译器、架构版本和你编译应用的环境完全匹配,比如你用的是Qt 5.9.1 msvc2015 64位版本就不能用msvc2017、MinGW或者32位的编译器编译,版本不匹配会导致Qt核心库加载异常直接崩溃。你可以把编译出来的exe放到Qt对应版本的
windeployqt工具处理后的目录下运行,先排除依赖缺失问题。 - 检查系统环境变量中的Qt路径是否冲突,如果你装了多个Qt版本,PATH里优先级高的Qt库版本和你编译用的版本不一致的话,会加载错误版本的Qt5Core.dll、Qt5Gui.dll,直接触发QApplication构造崩溃。你可以用MSVC开发者命令提示符下的
dumpbin /dependents 你的程序名.exe或者MinGW环境下的ldd 你的程序名.exe查看实际加载的Qt库路径是否正确。
无Qt源码获取崩溃信息的方法
- 用Windows原生调试工具WinDbg Preview启动程序,不需要Qt源码也能拿到崩溃的调用栈、异常码:启动WinDbg后按
F6选择启动你的可执行程序,崩溃后输入k命令即可打印完整调用栈,哪怕没有符号也能看到是在哪个Qt库的哪个偏移位置崩溃,可直接定位是平台插件加载失败还是窗口系统初始化失败类问题。 - 开启Qt全局日志和插件调试输出:在调用QApplication之前先添加如下代码:
qSetMessagePattern("[%{type}] %{function}:%{line} - %{message}"); QLoggingCategory::setFilterRules("qt.*=true");
运行程序前在终端执行set QT_DEBUG_PLUGINS=1开启插件加载调试日志,能看到QApplication构造过程中加载平台插件、字体配置等所有步骤的输出,可直接定位是否是加载qwindows.dll插件失败、系统字体配置异常等问题。
最小复现排查
- 直接用Qt Creator新建一个Qt Widgets空白项目,用和你当前项目完全一样的编译套件编译运行,如果空白项目也崩溃,说明是你的Qt环境本身有损坏,重新安装对应版本的Qt即可;如果空白项目正常,说明你的当前项目的构建设置有问题,对比两个项目的
.pro文件(qmake项目)或者CMakeLists.txt(CMake项目)的差异,重点检查QT变量引入、编译参数、链接参数是否有错误配置。 - 检查传入的
argc、argv是否被提前篡改,比如你在main函数第一行之前有没有全局对象的构造逻辑修改了命令行参数,QApplication构造时会解析命令行参数,异常参数也会直接触发崩溃,可以在构造QApplication之前先打印argc和所有argv的内容,确认参数正常。
内容的提问来源于stack exchange,提问作者billybob2
相关产品推荐
相关产品推荐

