Windows11下Qt调试启动触发汇编代码中断问题求助
我接手开发的Qt应用在Windows 11机器上正常运行近两年,近期启动调试模式时,调用.show()成员函数会触发异常,中断到汇编代码,弹出如下提示:
The inferior stopped because it triggered an exception.
Stopped in thread 0 by: Exception at 0x772a1fdf, code: 0xc0000005: read access violation at: 0xbaadf00c, flags=0x0 (first chance).
反汇编器停在此处:
[反汇编代码截图]
触发异常后继续运行可启动程序,但偶尔会再次中断到汇编代码并崩溃。
我使用MSVC编译,尝试过多个编译器版本、Qt 5.2.0/5.14.1/5.15.2版本,以及不同Windows SDK组合,在Windows11上均出现相同错误;VS Build tools 2015/2017/2019也无改善。
在另一台Windows10机器上,使用Qt5.14.1、MSVC编译器15.9.28307.2094、Windows10 SDK10.0.17763.132则运行正常。
Win11机器上的Qt安装配置:
[Qt安装配置截图]
我的Qt Creator“关于”窗口:
[Qt Creator关于窗口截图]
这让我十分困惑。我在Qt论坛求助时发现,测试Qt默认示例应用也会出现相同错误。我使用Qt Creator作为构建和调试工具,这并非代码问题——新建默认Qt项目,基础代码如下,仍出现相同错误:
#include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
与我的程序相同,调用.show()函数(此处为mainWin.Show())时出现“崩溃”,单步执行会进入反汇编:
[示例应用反汇编截图]
堆栈跟踪如下:
[堆栈跟踪截图]
Release模式运行
- 带调试启动:同样崩溃
- 不带调试启动:无崩溃
Debug模式运行
- 情况与上述一致
因此我认为问题出在调试运行上。
以下是我所说“带调试启动”对应的按钮:
[调试启动按钮截图]
- 完全重新安装Qt
- 完全重新安装所有Visual Studio开发工具和编译器
- 在CDB设置中勾选“Ignore first change access violations”——可消除调试启动时的异常捕获,但运行时触发断点仍会中断到汇编代码:
ntdll!DbgBreakPoint: 0x772c8c00 int 3 0x772c8c01 <+ 1> ret 0x772c8c02 <+ 2> int 3
内容的提问来源于stack exchange,提问作者jabroni

