• Qt+windows开发备忘录


    常用工具

    Everything
    windows本地文件搜索工具,官网下载地址:https://www.voidtools.com/zh-cn/

    BeyondCompare
    文件和文件夹比较工具,官网下载地址:https://www.beyondcomparepro.com/download/

    7z
    高效的主流压缩/解压缩工具,官网下载地址:https://7-zip.org/

    Wireshark
    网络分析抓包工具,官网地址:https://www.wireshark.org/

    SourceTree
    Git客户端管理工具,官网下载地址:https://www.sourcetreeapp.com/
    如果提示缺少.NET Framework 4.8,下载安装: https://dotnet.microsoft.com/zh-cn/download/visual-studio-sdks

    Qt下载,几个国内的镜像
    这些目前只能下载Qt5.9及以前部分版本。
    中国科学技术大学:http://mirrors.ustc.edu.cn/qtproject/
    清华大学:https://mirrors.tuna.tsinghua.edu.cn/qt/
    北京理工大学:http://mirror.bit.edu.cn/qtproject/
    中国互联网络信息中心:https://mirrors.cnnic.cn/qt/

    windows各版本操作系统下载:https://msdn.itellyou.cn/

    windbg
    windbg是分析release发布运行程序崩溃的重要调试工具,详见:windbg调试分析dump工具,使用windbg分析Qt崩溃原因

    dumpbin
    VS自带工具查看lib、dll、exe依赖库和函数,查看dll位数等。
    在VS安装目录找Developer Command Prompt命令行工具,一般在开始菜单容易找到,在命令行运行:
    dumpbin /dependents myapp.exe #查看可执行程序依赖的动态库。
    dumpbin -imports myapp.exe #查看它的输入信息。
    dumpbin -exports Qt5Network.dll #查看动态库的导出函数。
    dumpbin /headers Qt5Core.dll #查看动态库的位数,machine (x64)代表是64位的,machine (x86)代表是32位的。

    depends
    可查看exe或dll依赖的动态库列表,官网下载地址:http://www.dependencywalker.com/

    当程序缺少动态库无法运行时,使用depends工具查找丢失的依赖库,打开exe后有标黄和标红的即是可能存在问题的动态库,但如果有问题的是以API-MS-WIN-开头的系统库,可不用处理,主要查找是否丢失了我们自己调用的第三方库。

    depends可以查看是debug还是release的dll动态库,使用depends打开dll动态库,如果它依赖的其他dll库是以D结尾,那么这个动态库就是debug的,如果没有D结尾,就是release的;
    depends还可以用来查看dll动态库的位数,如果打开的是64位动态库,在动态库名称左侧的图标旁边有“64”的字样,如果打开的是32位动态库,则没有数字。

    VLD
    VLD( Visual Leak Detector),是一款用于 Visual C++ 的免费的内存泄露检测工具,Qt 的项目只支持MSVC的编译器,MinGW编译器不能使用。
    官网下载地址:https://kinddragon.github.io/vld/,我下载的是vld-2.5.1-setup.exe。
    双击安装后,在安装目录有三个文件夹:bin(动态库),lib(静态库),include(头文件)。
    QT在开发环境使用VLD,把vld.lib静态库拷贝到项目路径/lib/下,头文件拷贝到构建套件目录(比如C:\Qt\5.15.2\msvc2019_64\include\QtCore)。
    qt的pro文件添加

    LIBS += -L$$PWD/lib -lvld
    
    • 1

    在qt项目的源文件添加头文件(一般只在一个会执行到的cpp文件添加即可),编译运行后关闭程序,应用程序输出栏会打印内存泄漏信息,包含文件名和行号等。

    #define VLD_FORCE_ENABLE//release模式添加,debug模式不需要
    #include 
    
    • 1
    • 2

    ProcessExplorer
    windows官方进程资源管理器,可查看系统运行的进程,进程ID,进程占用的资源,进程内运行的所有线程,线程ID,线程占用的资源,线程的调用栈等等,功能强大。
    官网下载地址:https://download.sysinternals.com/files/ProcessExplorer.zip

    Windows中使用命令行杀进程
    taskkill /pid 22444 -f #根据PID杀死进程,PID可在任务管理器查看
    taskkill /f /t /im myapp.exe #根据应用程序名杀死进程
    ping fe80::3eec:efff:fe84:eff4%16 #ping IPv6地址,%16是网卡后缀,可用ipconfig查询

    TrafficMonitor
    windows下开源吞吐量实时测速、CPU/内存利用率工具,绿色无广告、轻量。
    下载地址:https://github.com/zhongyang219/TrafficMonitor/releases

    QT5.15.2+VS2019环境搭建

    VS2019下载地址:https://learn.microsoft.com/zh-cn/visualstudio/releases/2019/release-notes
    下载的是VS2019下载器,启动后选择“使用C++的桌面开发”,开始下载和安装。

    QT官网下载地址:https://www.qt.io/download,选择下载“Downloads for open source users”,再选择“Download the Qt Online Install”,下载Qt在线下载器。
    输入账号密码后,下一步,“选择组件”注意选择要安装的版本,主要是6.0以后的版本,6.0以前只支持安装5.15.2,选择MSVC2019和其他需要的组件即可。

    qt-vsaddin插件下载地址:https://download.qt.io/archive/vsaddin/2.8.1/,我下载的版本是qt-vsaddin-msvc2019-2.8.1-rev.06.vsix,关闭QT和VS,安装即可,会自动识别VS版本。

    安装完成后,启动VS2019,选择“创建新项目”,选择“空白解决方案”,选择保存路径后创建了.sln解决方案文件(可以和QT项目目录放在一起);
    VS菜单栏选择扩展-Qt VS Tools,选择Qt Versions,添加version,把QT安装目录下msvc路径复制过来,例如C:\Qt5.15.2\5.15.2\msvc2019_64;再次选择扩展-Qt VS Tools,选择Open Qt Project File(.pro),选择QT的pro文件,解析加载QT项目,右键选择加载进来的项目,点击“生成”即可进行编译。

    windows下QT的调试体验较差(比如单步调试卡死,调试调用栈比较浅,调试信息不全等),建议开发时使用QT,调试时 使用VS。
    ps:注意当在QT开发时添加了新文件,在VS里也要添加一次(添加-现有项),否则会报无法解析的外部符号。

    vscode远程开发配置

    vscode官网下载地址:https://code.visualstudio.com/Download
    安装完成后:
    点击左侧Extensions选项卡
    搜索Chinese安装中文插件
    搜索插件Remote Development,安装
    安装完成后,左侧增加了Remote Explorer选项卡,点击进去
    点击Open SSH Config File,点击弹出的config文件,例如C:\Users\Administrator.ssh\config
    Host远程主机名,HostName远程主机IP,User登录用户名,Port端口(一般为22)
    菜单栏,File-Preferences-Settings,搜索Show Login Terminal,勾选 Always reveal the SSH login terminal
    点击Connect in New Window,在新窗口选择linux平台,下面终端输入密码,打开项目文件夹。
    Extensions选项卡,搜索安装插件gitlens.
    配置SSH免密登录。

    可在远程资源管理器界面,点击+号,新建远程,输入命令:ssh chw@192.168.3.66

    安装中文插件不显示中文:
    按住ctr+shift+p,在出现的输入框中,输入Configure Display Language,选择中文,重启vscode。

    windows使用cmd命令行g++编译C++源文件

    下载安装包:https://sourceforge.net/projects/mingw/
    下载成功:mingw-get-setup.exe,双击安装,默认安装在C:\MinGW。
    打开界面,选择安装项:All packets->MinGW->MinGW Base System->MinGW Compiler Suite;右边框选择Description栏目下与The GNU C++ Compiler相关的4个安装包,选择菜单栏Installation->apply changes,下载完成后关闭窗口。

    添加系统环境变量,右键我的电脑-属性-高级系统设置-环境变量。

    1、系统变量->Path->编辑->新建->C:\mingw\bin->确定
    2、系统变量->新建->变量名:LIBRARY_path->变量值:C:\mingw\lib->确定
    3、系统变量->新建->变量名:C_INCLUDE_PATH->变量值:C:\mingw\include->确定

    win+R运行cmd,查询g++版本,查询成功则说明安装好了。

    C:\Users\13770>g++ -v
    
    • 1

    如果还提示g++不是内部或外部命令,执行如下命令安装。

    cd C:\MinGW\bin
    mingw-get install gcc g++
    
    • 1
    • 2

    写个简单测试程序:

    #include 
    
    int main()
    {
    	printf("hello world.\n");
    	while(1){}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    编译运行

    g++ main.cpp	#同级目录生成可执行文件a.exe
    a.exe			#运行
    
    • 1
    • 2

    打印

    hello world.
    
    • 1

    报错记录

    :-1 : error: Debugger encountered an exception: Exception at 0x7ffa86965299, code: 0x6f4: , flags=0x1 (execution cannot be continued) (first chance)

    在调试器中运行程序时,如果程序产生异常,调试器会首先获得通知(即First-chance exception),而后此异常由产生它的程序负责捕获。如果程序没有捕获此异常,那么调试器会再次被通知(即Second-chance exception,Last-chance exception),并结束程序。
    如果编译报错,但不影响程序运行,可选择忽略该消息,可设置:工具-选项-调试器-CBD,去勾选“First-chance exceptions”。

    由于找不到MSVCR100.dll,无法继续执行代码

    MSVCR100.dll也有可能是其他MSCV开发的库,问题类似,当前本地目录没有这个库,系统环境变量路径里也找不到这个库,在开发环境找到这个库拷贝过即可,主要版本位数要匹配,如果不匹配会报下面的0xc000007b错误。

    应用程序无法正常启动0xc000007b

    缺少DLL动态库或库版本不对,库位数不对,通常是缺msvc的库(msvcr100.dll,msvcr120.dll,msvcp140_1.dll,msvcp120.dll等),使用Everything工具搜索,拷贝系统目录(C:/Windows/system32等)或VS安装目录,一定要注意版本和位数。
    排查思路:
    1、重命名本地可执行文件路径里面的msvc库,看是不是这些库的版本或位数不对;
    2、或者本地目录没有这些库,程序链接到了系统环境里面的同名库,但这些库版本不匹配,使用上面的dumpbin命令查看依赖库,查看系统环境变量路径,找到与环境变量匹配的依赖库的路径,通过重命名或其他方式排除哪一个库有问题,再找到匹配的同名库,拷贝到本地路径。

    以上问题还有一个更方便的解决办法,使用windbg工具打开.exe可执行程序,会自动加载动态库,并显示加载动态库的路径,当弹出0xc000007b错误时,加载动作停止,最后面加载的几条动态库出问题的可能性大,一般是msvc的库,大致可以判断是哪个库的问题(每次打开.exe时加载动态库顺序不太一样,可以多试几次)。

    也可以使用专业查找缺失DLL动态库的工具:depends,上面常用工具里有介绍,这里不再详述。

    无法解析的外部符号,socket相关函数

    C++进行Windows socket网络编程,需链接lws2_32库:

    LIBS += -lws2_32
    
    • 1
  • 相关阅读:
    【目标跟踪】|单目标跟踪指标
    Java:基础语法2
    【面试题】LockSupport
    PTA 7-217 在数组中查找1
    Linux基础指令(四)
    模拟一个火车站售票小例子
    阿里分布式事务seata
    NSSCTF做题(4)
    GitHub怎么创建仓库上传文件
    如何解决全局工业相机飞拍拖影问题
  • 原文地址:https://blog.csdn.net/weixin_40355471/article/details/127324512