VS遇到的一些问题及解决办法(持续更新)

在VS下使用QDebug打印调试信息

问题:

使用 visual studuio 开发 Qt 程序时却看不到打印的调试信息。

解决办法:

右击 “项目名称” -> “属性”,更改 链接器->系统->子系统 为 “控制台 (/SUBSYSTEM:CONSOLE)”

参考:visual studio 2019开发Qt程序,使用CMD打印QDebug调试信息

如何调试到 lib 内的函数

需要是本地电脑上的工程编译出的 lib,具体调试的工程链接该静态库 .lib,这样才能调试到对应的源文件中 .cpp,否则在其他电脑或路径是链接不到库的 .cpp 文件的。

打开别人的Qt版本的VS工程

在网上下载了个别人的工程,编译找不到 QWiget 等头文件,说明 Qt 编译器版本不一致,打开 *.vcproj 文件:

  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|Win32'" Label="QtSettings">
    <QtInstall>msvc2015_32</QtInstall>
    <QtModules>core;gui;widgets</QtModules>
    <QtBuildConfig>release</QtBuildConfig>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|Win32'" Label="QtSettings">
    <QtInstall>msvc2015_32</QtInstall>
    <QtModules>core;gui;widgets;opengl;multimedia</QtModules>
    <QtBuildConfig>debug</QtBuildConfig>
  </PropertyGroup>

发现别人的工程是 VS2015_32,如果你电脑 VS 的 Qt 编译器是 VS2017_32,版本不一致肯定编译不了,所以需要修改 *.vcproj 文件,将上面的两个msvc2015_32都修改成msvc2017_32,修改完切进 VS 同意加载所有修改,发现可以找到 QWiget 等头文件了。

补充介绍另一种方法:右键 "项目名称" -> "Qt" -> "Qt Project Settings",从 "Version" 下拉列表选择你的 Qt 编译器版本,我这里是msvc2017_32。图文参考:vs打开别人的qt项目如何配置

需要查看函数或变量的调用地方

有时候你需要查看某个函数或者变量在哪里被调用,不要再使用ctrl + f全局查找了,右键该函数或项目,选择 "查找所有引用" 即可。

同理还有:"转到定义" 和 "转到声明"。

VS 快速修改include和lib路径

如果从一台电脑拷贝一个工程,但其工程的 include 和 lib 路径全是绝对路径,一个个在属性里太过麻烦,如何解决?

修改 *.vcproj 文件:

// include路径
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..include;..includeFFmpeg;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

// lib路径
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..libwin32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>      

上面是 Debug|Win32 的 include 和 lib 目录配置。

如何从dll文件导出对应的导出库lib文件?

具体可参考:

如何从dll文件导出对应的lib文件?

DLL库的编写(导出、导入)与使用

vs调试dll工程

参考:

vs调试dll工程

VS_Qt打包程序提示“应用程序无法正常启动(0xc000007b)”

使用DependenciesGui.exe查看依赖库,发现libeay32.dll版本不对,要是阿里云 SDK 提供的那个,使用其它库提供的依然会报错。

error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2

release 下,在库版本匹配没有问题。但是编译报错error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”

解决办法:release 下,工程设置中运行库应该设置为 “多线程 DLL (/MD)”。

参考:https://www.pianshen.com/article/1192270064/

原文地址:https://www.cnblogs.com/linuxAndMcu/p/12164248.html