在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文件?
具体可参考:
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)”。