Qt Debug 环境的设置(Qt5.6+msvc2015)

来源:互联网 发布:不配说爱我dj网络歌手 编辑:程序博客网 时间:2024/05/17 05:00

Qt安装好之后demo项目直接使用debug是无法使用的,我的开发环境是win10 64位+Qt 5.6.1 for Windows 64-bit (msvc2015),并且装有Visual Studio 2015,所以需要安装CDB,如果你使用的是MinGW那就使用GDB。

但是安装之后如果用Qt creator随意打开一个项目想使用Debugger的话会弹出一个empty engine的提示框,是的,就是提醒我们没有安装CDB或GDB。

1.所以理所当然我们需要安装CDB,安装CDB就需要安装WDK(windows driver kit-这是windows驱动开发以及调试的一个套件),废话不说直接从微软下载:

https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit

clip_image002[4]

安装完之后可能需要需要打开 选项->构建和运行 会自动显示编译工具链,我使用的是MSVC2015 64bit。如果没有自动检测出CDB请手动设置选择下,如果你还有32bit的工具链,请一一对应选择:

clip_image004[4]

2.现在设置好按理说直接运行debug应该没有问题了,当然可能还需要一些细节设置,但是我们先随意选择一个demo项目运行一下,咦---!报错了…

clip_image006[4]

运行时会发现定位到一个缺失"corecrt.h”,crt我们知道是C runtime library的缩写,听着名字是不是感觉就很重要…为什么会缺失这个,不知道…初步怀疑是不是与安装WDK有关,谷歌度娘之…几条线索,一个一个来…

https://social.msdn.microsoft.com/Forums/vstudio/en-US/86bc577b-528c-469c-a506-15383a44c111/missing-corecrth-from-the-default-include-folder-for-vs215?forum=vcgeneral

See the following article on the Visual C++ Team Blog:  "Introducing the Universal CRT" (http://blogs.msdn.com/b/vcblog/archive/2015/03/03/introducing-the-universal-crt.aspx).

Your project is missing that directory (C:\Program Files (x86)\Windows Kits\10\Include\10.0.10069.0\ucrt) from its include path.  Ideally, your project should derive its IncludePath from the IncludePath set by the built-in Visual C++ targets that we provide with Visual Studio.  If you do that, then this header would be picked up automatically.  If you choose not to do this, you'll need to add this directory to your IncludePath (preferably by adding $(UniversalCRT_IncludePath).

You will likely need to make similar changes to the LibraryPath.

· Marked as answer by Shu HuMicrosoft contingent staff Monday, July 06, 2015 9:53 AM

提示我们主要是IncludePath这个环境变量的问题,说白了也就是头文件include的问题,根据引文我们直接在C:\Program Files (x86)\Windows Kits\10\目录中搜索发现该文件:

clip_image008[4]

那我们先尝试在项目配置中加入这个包含路径测试一下,Qt creator中增加这个环境变量只是临时的,和你在命令行cmd或者linux中的shell运行一样,只是针对当前用户当前shell改变环境变量。如图,注意下方图片加粗黑体INCLUDE环境变量,我在其最前面添加了:

C:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt

clip_image010[4]

果然产生效果了,错误数目减少了!但是又报错了…

clip_image011[4]

说明相对应的链接库也没找到…也就是说LIB环境相应的最好也配置下,那怎么配置呢,根据之前的经验直接在C:\Program Files (x86)\Windows Kits\10\再搜索下。

我们会发现四个文件:

clip_image013[4]

这四个文件分别对应目录x86,x64,arm,arm64,意思显而易见。

好吧,我的MSVC是64bit的当然是选择x64。按照前一步一样增加这个x64目录的ucrtd.libLIB系统环境变量下,设置一下看看效果:

clip_image015[4]

注意环境变量一般有对应多个目录路径,一般用分号“;” 进行间隔,我直接把路径加在最前面,所以尾巴上不要加一个“;”,这句话是对完全是菜鸟的同学说的,但是菜鸟没关系,每学一个新事物之前我们都是菜鸟,关键要不断累积和掌握自己如何解决问题的思路和方法

Ok,测试一下!

clip_image017[4]

运行成功!

3.好了…是不是这样就结束了…想想还有什么问题?

如果我这是两种工具链,比如是msvc2015 64bit和32bit两种,难道我每一次建立新项目和使用example项目进行debug运行时都要设置下项目属性吗?特别如果在自学习中每次要用Qt自带example我会崩溃的…有没有什么办法可以一次性设置好呢?

再次百度谷歌之,虽然我们发现问题解决的办法,但是并没有发现这个问题产生的根源…

发现一条线索:

https://answers.unrealengine.com/questions/320877/universalcrt-includelibrary-directories-missing-on.html

在这有人说:

After a long time trying to figure this out I found that the main reason of this bug. It is because I had Windows Driver Kit installed.

It is/was a known bug in vcvarsqueryregistry.bat and apparently Unreal Build Tool is using the same logic.

With Windows Driver Kit installed, the include and lib directories of Windows Kits had more than one directory inside (wdf + a bunch of others) in C:\Program Files (x86)\Windows Kits\10\include AND C:\Program Files (x86)\Windows Kits\10\Lib and Unreal Build Tool was using the wrong directory.

To solve this issue, I just uninstalled Windows Driver Kit and now everything works. I suggest, though, a fix in the logic of Unreal Build Tool in case someone has the same problem I had and cannot uninstall Windows Driver Kit.

提示说WDK可能会导致一个bug,点开bug链接:

https://connect.microsoft.com/VisualStudio/feedback/details/1610302/universalcrt-detection-breaks-when-windows-driver-kit-is-installed

注:接下来凡是包含VS安装路径的盘符我们都以X:来代表,像我就是安装在D盘。

说白了就是安装WDK时会导致使用Universal CRT失败,因为"X:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\vcvarsqueryregistry.bat"这个批处理文件

https://connect.microsoft.com/VisualStudio/feedback/details/1672309/installing-the-windows-10-wdk-breaks-vc-command-line-builds

提示说“C:\Program Files (x86)\Windows Kits\10\Include”多出来的额外目录“wdf”因为不是数字版本会影响批处理文本生成的变量环境,看看下面截图的第三个目录,就这货长的不一样。

clip_image018[4]

而这个bug微软一直说修复…呵呵呵…而bug也有人反应说可以通过隐藏wdf目录,也就是说你可以把wdf先备份移动到其他目录试试。(不建议

但是这种破坏环境的动作我们不做,我们是环保主义者:)

好吧,其实说白了也就是环境变量的问题,那我们手动来解决吧。

clip_image020[4]

点开Qt Creator的工具->选项->构建和运行切换到编译器标签,随意点开一个版本我们会看到最下面有一行字“X:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\vcvarsall.bat x86”,(注意上图最下面)。推测这个是设置环境变量的bat文件,因为最后一个参数明显是针对不同编译版本的参数。那我们就点开这个bat文件吧:(下图是vcvarsall.bat这个文件的部分截图 )

clip_image021[4]

我们可以发现如果参数不一样会先切换成对应的目录(就是前面提到的x86,x64,arm,arm64并且调用对应的bat文件生成环境变量。(注意上面的bin\vcvars32.batbin\amd64\vcvars64.bat

那我们在切换到对应的批处理文件看看是什么玩意吧?

默认32位的是这个“X:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin”目录下,而64位的是在“X:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64”文件夹里。

下面修改的只是vcvars32.bat文件,64位需要使用的话也要修改一下vcvars64.bat

clip_image023[4]

直接跳到@rem INCLUDE 和 @rem LIB这个位置,rem这个是批处理里面用来注释的一个命令,方便标记和阅读。我们要改的变量是INCLUDELIB这两个变量,(上图只是为了告诉你我们可能需要修改INCLUDE和LIB 这两个变量,标示位置并没有修改批处理文件),所以基本可以断定是先改这了,先试试!修改之前记得备份喔!养成一个良好的习惯!

clip_image025[4]

我们分别在两个@if exist之后添加了“set INCLUDE=X:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt;%INCLUDE%”和“set LIB=X:\Program Files (x86)\Windows Kits\10\Lib\10.0.10150.0\ucrt\x86;%LIB%”。(上图2处高亮位置均增加了以上2行代码

但是如果你是64位的MSVC记得在对应文件夹的批处理文件添加“set INCLUDE=X:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt;%INCLUDE%”和“set LIB=X:\Program Files (x86)\Windows Kits\10\Lib\10.0.10150.0\ucrt\x64;%LIB%”。(INCLUDE变量增加的和32位一样,同一个一个头文件而已,但是lib文件不一样)。

来吧,测试下吧!

先关掉Qt Creator再重新打开,重新载入环境变量:

clip_image027[4]

Ok,示例运行成功啦,点开项目看下环境变量,没问题!

clip_image029[4]

1 0
原创粉丝点击