前言——这个问题可能比较小众,但是因为解决了我自己的问题,所以特此把解决方法分享出来,以给特定的人提供必要的帮助。
项目原因,一直使用VS2019+Qt5+Vcpkg,无奈程序一直无法进行调试,Release模式倒是正常运行,按照正常新建工程的步骤,直接进行debug模式的调试,则会出现如下错误:
已启动生成…
1>------ 已启动生成: 项目: qt5VcpkgDebugProblem, 配置: Debug x64 ------
1>Reading Qt configuration (E:/libs/vcpkg/installed/x64-windows/tools/qt5/bin/qmake)
1>LINK : fatal error LNK1104: 无法打开文件“E:\libs\vcpkg\installed\x64-windows\lib\Qt5Widgetsd.lib”
1>已完成生成项目“qt5VcpkgDebugProblem.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
此时可以注意到一个路径问题,其实这个路径问题是因为qt中debug路径没有配置正确,而引起debug路径没有配置正确的原因,是因为当时选择qt版本的时候,没有选择debug模式,如下图所示:
我们可以在项目配置中对此进行更改,如下图所示:
但是你会发现,问题不仅没有得到解决,反而似乎导致了更多的问题。
已启动生成…
1>------ 已启动生成: 项目: qt5VcpkgDebugProblem, 配置: Debug x64 ------
1>Reading Qt configuration (E:/libs/vcpkg/installed/x64-windows/tools/qt5/debug/bin/qmake)
1>uic qt5VcpkgDebugProblem.ui
1>rcc qt5VcpkgDebugProblem.qrc
1>moc qt5VcpkgDebugProblem.h
1>C:\Users\Administrator\AppData\Local\QtMsBuild\qt_globals.targets(269,5): error MSB4181: “QtRunWork”任务返回了 false,但未记录错误。
1>已完成生成项目“qt5VcpkgDebugProblem.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
你当然可以沿着这个问题继续往下解决,但是我发现此时已经陷入死胡同,我只不过是想对新写的代码进行调试,其实对于qt部分使用debug或者release的库,我并不关心,而且因为我注意到release版本的程序正常运行,于是我进行了一个特别的尝试。
在debug配置下,将BuildConfig改为Release,其他不改变!
此时,你会发现程序正常编译通过了,并且提示了缺少qt运行平台的问题,看到这个问题,我们知道程序已经成功生成了,我们只需要使用windeployqt命令将缺少的库加入即可!当然,至此我们还没有确定成功达成调试的目标,稍后测试。
此时,你直接使用windeployqt对debug的程序进行操作,会发现可能无法正确找到对应的dll,因为此时的配置是混用的,比如我就碰到了如下错误:
Unable to locate ICU library icudtd69.dll
即便找到了对应的 icudtd69.dll,加入到exe目录,再次windeployqt,错误依旧,此时我们得换一个思路了,编译Release版本,然后寻找对应的dll。
对于Release版本的exe进行windeployqt操作,一切正常。
此时,我们仍然发现报错:
找到对应的E:\libs\vcpkg\installed\x64-windows\plugins\platforms\qwindows.dll,保证目录结构如下图:
将除exe之外的所有依赖文件,包括paltforms文件夹,拷贝到对应的debug目录,如下图所示:
此时,直接运行debug版本的exe,我们可以发现程序正常运行了!
接下来,尝试调试,为了看到调试效果,写了几行冗余代码,并且可以看到调试信息。
至此,问题得到解决!
中间过程稍微有点多,因为你可能会碰到各种各样的问题,需要耐心依次解决。
这个问题的解决方法并不是标准的解决方法,因为采用了混配debug合release的配置,只能说这是一个临时解决VS2019+Qt5+Vcpkg工程无法调试的办法。
如果大佬们有更好的解决办法,欢迎交流与分享。