如何用VS进行程序调试(vs怎么调试代码)
cac55 2024-09-20 13:02 26 浏览 0 评论
VS是一个强大的IDE,如果你现在只会简单地用它查看一下执行效果,那就太大材小用了。
1. CRT函数报错
首先来说说最常见的一个编译错误。微信里常常收到这个错误的截图提问。
CRT(C Runtime Library = C运行时间库)是windows平台下的一个概念。CRT函数准的C语言函数。例如:printf、scanf、strlen、fopen等函数都属于CRT函数。
安全CRT函数是微软对C/C++的扩展,对大部分的CRT函数都派生了一个新的函数形式。比如把fopen
函数重新定义如下:
errno_t fopen_s(FILE** pFile, const char *filename, const char *mode);
微软认为,使用这种函数能够帮助开发者更好地规避内存泄露、空指针访问等常见问题。为了尽量让大家养成使用安全CRT的习惯,在编译没有使用安全CRT函数的代码时,VS会报出如下错误:
Error 1 error C4996: 'freopen': This function or variable may be unsafe.
Consider using freopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
See online help for details. e:\c\vstestc\vstestc\fileoper.c 8 1 VSTestC
如果你想让自己的代码写的更通用,不想使用微软的所谓安全CRT函数,可以使用下面的方法:
1.1 代码中定义宏
如果你仔细越短报错信息,就会发现其实VS已经告诉你怎么解决了。只要定义一下_CRT_SECURE_NO_WARNINGS
就能解决。把下面的句子写在代码中:
#define _CRT_SECURE_NO_WARNINGS
现在编译是不是就成功了。
1.2 工程中配置
如果非安全CRT函数用在很多不同的文件中,由于作用域的关系,你可能需要在多处写下宏定义语句。这样不太方便,这时候你可以选择在工程配置中一劳永逸的解决这个问题。步骤如下:
打开工程属性界面
在工程名上右键,选择“Properties”,进入下面的界面。
宏定义添加窗口
如图,选择“Configuration Properties” -> “C/C++” -> “Preprocessor” -> “Preprocessor Definitions”。点击右边的下拉箭头,之后点击“Edit”。
添加宏定义
把_CRT_SECURE_NO_WARNINGS
添加到List中。
之后,点击OK。
现在编译试试,报错没有了。
1.3 静态引用运行时库
打开打开工程属性界面,选择“C/C++” -> “Code Generation” -> “Runtime Library”。
如图,默认情况下是动态引用。我们需要改成静态引用。
下拉窗中的四个选项意义如下。
对与debug版本的程序:
/MTd 静态引用运行时库的debug版本
/MDd 动态引用运行时库的debug版本
对与release版本的程序:
/MT 静态引用运行时库的release版本
/MD 动态引用运行时库的release版本
1.4 忽略警告
报错信息中,有这样一部分error C4996:
,这是这个问题的错误码。我们可以显示地要求VS不要提示这种问题的信息。只要在代码开始的部分加入下面这句话即可:
#pragma warning(disable:4996)
问题是不是解决了。
2. 查看运行结果
#include int main(){ printf("Hello world!"); return 0;
上面这段代码,如果直接按F5运行,你会看到一个一闪而过的控制台窗口。这个窗口出现的时间很短,以至于很难看清楚结果。解决这个问题又很多方法,常见的大概有下面四种:
2.1 Ctrl + F5
这个是最常见的方法,按下Ctrl + F5
组合键,会看到下面这个结果:
美中不足的是系统会自动添加一行字:“请按任意键继续...”。当你按任意键之后,窗口消失。
2.2 断点
如图所示,在最后一行代码处打断点。之后,按F5开始调试执行程序,会看到下面这个结果:
程序被停在断点处,而命令行窗口也被停下了。看完结果后,只需要再按一下F5继续执行程序,它就会正常结束。
2.3 getch()
通过getch
函数,可以实现和2.1相同的效果,不过没有哪行字。代码如下:
int main(){ printf("Hello world!");
执行这段代码,命令行会停在新加这行代码执行后,直到按下任意键程序才继续执行到结束。
2.4 system("pause")
system
函数是不是很熟悉,上一篇文章中我们已经认识过了。加上这句话其实是调用了系统提供的pause
这个命令。效果和2.1完全相同。
3. 单步调试
依然是前面那段代码,我们按F10
键来进行单步调试。
左边黄色的箭头表示当前程序的执行位置。按一下F10键,箭头指向的这行代码就被执行,同时箭头指向下一行。这样完全按照程序运行的过程执行。
如果程序是这样,在调用Function
函数时,如果按F10
,程序会一次执行完整个Function
函数。但如果你按F11
,箭头会进入Function
函数内部,就像这样:
在程序运行中,把鼠标停留在一个变量上,此时会看到这个变量当前的值。如下图:
当然,还可以把这个变量拖入watch窗口,这样就能实时查看这个变量的变化:
单步调试还有很多神奇之处需要你慢慢发现。这部分内容不好讲,不过你只要稍微操作一下就能学会。
4. 条件断点
int main(){ int i; for (i = 0; i < 100; i++)
这段代码很简单,打印0~99这100个数,假如,我是说假如你的程序运行到第95次循环时出现了问题,如果你想单步调试看看i的变化情况,你不可能一直按F10直到第95次循环。那样手肯定吃不消。这时候,就用到了条件断点的方法。修改代码如下:
如图,添加一组 if 语句,把断点打在 if 中的代码里。现在按F5调试执行,程序会在第95次循环中我们打断点的地方停下,之后你再按F10单步调试就好了。是不是简单多了。
5. 调试的乐趣
调试代码能够让编程变得不那么枯燥。当你一步一步跟着程序的执行方式去思考问题,你会更加深刻地体会计算机的某些逻辑。
另外,在你写程序时,脑子里想的是如何设计代码,但在你调试的过程你会在另外一个角度去审慎这段代码,这时你很容易发现其中的不足之处。很多情况下,一个程序有问题,看代码怎么也发现不了究竟错在哪里,不过一调试就能马上找到。
学会了代码调试,你的编程学习就算是真正入门了。它不仅仅是你软件开发中的工具,也是编程学习过程中不断提高和不断自我完善的神奇。
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群
639368839,我们一起学C/C++!
相关推荐
- 小车五位自动循环往返控制_小车自动往返控制系统
-
需求描述:用三相异步电动机拖动一辆小车在A、B、C、D、E五点之间自动循环往返运行,小车初始在A点,按下启动按钮,小车依次前进到B、C、D、E点,并分别停止2s返回到A点停止。按下停止...
- 自动灌溉系统_自动灌溉系统by
-
需求描述:PLC时钟设定每日6:00、18:00自动启动灌溉系统,每次运行15分钟后停止;非定时时段按下手动灌溉按钮,立即启动并运行15分钟;土壤湿度传感器检测到湿润时,跳过本次定时灌溉...
- 主板ERP开启还是关闭好_主板设置erp是什么
-
主板功能的开启与关闭,本质是在“节能环保”和“使用便利”之间做选择。为帮你快速决策,先给出直接结论,再深入解析原理、影响及操作步骤,让你根据自身需求精准设置。一、直接结论:ERP功能如何选?...
- 新电脑必做5项设置!做完再玩,流畅安全多用三年
-
刚拿到新电脑,兴奋之余先别急着开机畅玩!做好以下这5大设置,能让你的爱机长期保持流畅如新,安全又省心。尤其是最后一招,很多老用户都不知道!1关闭隐私常规,杜绝数据偷跑新电脑首次开机进行系统初始化时,...
- 属于 PHP 开发者的 Supervisor 实用指南
-
属于PHP开发者的Supervisor实用指南在PHP开发中,我们经常需要运行一些后台进程:队列处理、长时间运行的脚本、WebSocket服务器等。这些进程可能会因为各种原因意外退出,手...
- 领导半夜12点微信派活?三句高情商回复,反手拿捏让他不敢再烦
-
友友们大家来啦!今天来和大家一起分享精彩话题老规矩先点赞再看文!0102别在这里害人了,现在能保住工作就烧高香了,再得瑟,明天早上去办离职0304很简单,把他一起拉上,每半小时打电话或语音汇报,一两次...
- "零点黑科技!硬盘自动备份+离线神操作,服务器数据安全躺赢"
-
公司有一台服务器,数据库需要每天零点进行数据库备份,要求在本机备份一次,再在移动硬盘上异地备份一次。备份完成后硬盘自动离线。具体思路如下:数据库自动备份时间为每天0点,备份过程约需1分钟。0点时开启硬...
- 峰谷电:白天贵、晚上便宜,你家真的适合开通吗?
-
电费单又超预算了?别急着关掉空调,其实你可能错过了一个"电费打折"的机会——峰谷电。它就像电影院的日场和夜场票,白天贵、晚上便宜,聪明利用,电费真的能省下来。一、峰谷电是什么?峰谷电把...
- 电脑开机密码设置全指南:从基础到进阶的安全防护
-
在数字化时代,电脑存储着大量个人隐私和重要数据,设置开机密码是保护信息安全的第一道防线。本文将系统介绍Windows、macOS、Linux三大主流操作系统及BIOS层面的密码设置方法,同时涵盖密码管...
- 自动喷香机_香薰机自动喷香机
-
需求描述:PLC时钟设定每日9:00、14:00、18:00自动启动喷雾,每次喷雾3秒后停止;非定时时段按下手动喷雾按钮,立即喷雾3秒;香薰液缺液传感器检测到液位过低时,停止喷雾并亮报警...
- macbook系统自动启动项在哪里查看
-
了解和管理MacBook的开机自动启动项,是优化系统启动速度和运行效率的好方法。下面我来为你介绍几种查看和管理这些启动项的方法。查看和管理MacBook启动项1.通过系统设置(最简单直接的方法)...
- 想让电脑自己到点开机和关机?这4个超实用的设置方法快收好!
-
嘿,你是不是也经常忙到忘记关电脑?或者早上想用电脑时发现还没开机?别慌,今天我就跟你分享几个超实用的方法,帮你轻松搞定电脑的定时开关机设置。不管你是电脑小白还是有点基础,这篇教程都能让你秒懂操作,省时...
- 定时关机这样操作小白也会 一招设定工作日关机 指定时间关机
-
在日常使用电脑的过程中,我们常常会遇到这样的情况:晚上睡觉前忘记手动关机,导致电脑整夜运行,既浪费电又缩短硬件寿命;或者在下载大文件时,需要等待很长时间才能完成,却不能一直守在电脑前,下载完成后也无法...
- 日本无线电操作证试题,这些问题你能答的上来吗?
-
一直以来,我们对于日本的业余无线电的印象都停留在“操作能力强,爱好者数目众多”上,然而我们对于他们的业余无线电体系所知甚少。日本业余无线电操作证的等级分作四级,最基本的四级操作证书具有8MHz以下、2...
- 你知道吗?单边带信号就像DNA分子一样!
-
我们在准备B级操作证书的过程中,避免不了的要接触到一个新的名词——SSB。单边带是传统AM模式的一种特殊的形式,在传送相同的信息的过程中,其占用的带宽仅为AM模式的一半,那么SSB模式到底是怎样的一种...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 如何绘制折线图 (52)
- javaabstract (48)
- 新浪微博头像 (53)
- grub4dos (66)
- s扫描器 (51)
- httpfile dll (48)
- ps实例教程 (55)
- taskmgr (51)
- s spline (61)
- vnc远程控制 (47)
- 数据丢失 (47)
- wbem (57)
- flac文件 (72)
- 网页制作基础教程 (53)
- 镜像文件刻录 (61)
- ug5 0软件免费下载 (78)
- debian下载 (53)
- ubuntu10 04 (60)
- web qq登录 (59)
- 笔记本变成无线路由 (52)
- flash player 11 4 (50)
- 右键菜单清理 (78)
- cuteftp 注册码 (57)
- ospf协议 (53)
- ms17 010 下载 (60)