C++/windows开发备忘录

44 篇文章 10 订阅

常用工具

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

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

#define VLD_FORCE_ENABLE//release模式添加,debug模式不需要
#include <vld.h>

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

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

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

写个简单测试程序:

#include <stdio.h>

int main()
{
	printf("hello world.\n");
	while(1){}
}

编译运行

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

打印

hello world.

报错记录

:-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
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值