VC调试入门 范鲁艳 11.18

分享经典、现代和前沿软件工程课程 帮助读者系统而完整地梳理了软件工程的经典、现代和前沿理论、方法和技术,通过案例分析让读者了解其运用,并以浅显易懂的方式讲授业界广泛使用的方法和技术如敏捷开发方法、群智化开发方法-开源和众包、DevOps方法等,让读者理解和掌握现代业界使用的方法和技术。而系统工程的目标是寻求最优解。理论上说,一对一的情况下,三个人之间的沟通量是两个人之间沟通量的3倍,四个人之间的沟通量是两个人之间沟通量的6倍,考虑到多个人或者多个团队之间开会协商、一起解决问题的需要,增加人手的作用往往要大打折扣,甚至可能起到负面的作用。 阅读详情
  
VC调试入门

概述
调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。
这里我简要的根据自己的经验列出调试中比较常用的技巧,希望对大家有用。
本文约定,在选择菜单时,通过/表示分级菜单,例如File/Open表示顶级菜单File的子菜单Open。
设置
为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard创建的工程中包含的Debug Configuration自动包含调试信息,但是是不是Debug版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration中增加调试信息,包括Release版本。
为了增加调试信息,可以按照下述步骤进行:
  • 打开Project settings对话框(可以通过快捷键ALT+F7打开,也可以通过IDE菜单Project/Settings打开)
  • 选择C/C++页,Category中选择general ,则出现一个Debug Info下拉列表框,可供选择的调试信息方式包括:
     
命令行
Project settings
说明
无
None
没有调试信息
/Zd
Line Numbers Only
目标文件或者可执行文件中只包含全局和导出符号以及代码行信息,不包含符号调试信息
/Z7
C 7.0- Compatible
目标文件或者可执行文件中包含行号和所有符号调试信息,包括变量名及类型,函数及原型等
/Zi
Program Database
创建一个程序库(PDB),包括类型信息和符号调试信息。
/ZI
Program Database for Edit and Continue
除了前面/Zi的功能外,这个选项允许对代码进行调试过程中的修改和继续执行。这个选项同时使#pragma设置的优化功能无效
  •  
  • 选择Link页,选中复选框"Generate Debug Info",这个选项将使连接器把调试信息写进可执行文件和DLL
  • 如果C/C++页中设置了Program Database以上的选项,则Link incrementally可以选择。选中这个选项,将使程序可以在上一次编译的基础上被编译(即增量编译),而不必每次都从头开始编译。
断点
断点是调试器设置的一个代码位置。当程序运行到断点时,程序中断执行,回到调试器。断点是最常用的技巧。调试时,只有设置了断点并使程序回到调试器,才能对程序进行在线调试。

设置断点:可以通过下述方法设置一个断点。首先把光标移动到需要设置断点的代码行上,然后
  • 按F9快捷键
  • 弹出Breakpoints对话框,方法是按快捷键CTRL+B或ALT+F9,或者通过菜单Edit/Breakpoints打开。打开后点击Break at编辑框的右侧的箭头,选择合适的位置信息。一般情况下,直接选择line xxx就足够了,如果想设置不是当前位置的断点,可以选择Advanced,然后填写函数、行号和可执行文件信息。
去掉断点:把光标移动到给定断点所在的行,再次按F9就可以取消断点。同前面所述,打开Breakpoints对话框后,也可以按照界面提示去掉断点。

条件断点:可以为断点设置一个条件,这样的断点称为条件断点。对于新加的断点,可以单击Conditions按钮,为断点设置一个表达式。当这个表达式发生改变时,程序就被中断。底下设置包括“观察数组或者结构的元素个数”,似乎可以设置一个指针所指向的内存区的大小,但是我设置一个比较的值但是改动范围之外的内存区似乎也导致断点起效。最后一个设置可以让程序先执行多少次然后才到达断点。

数据断点:数据断点只能在Breakpoints对话框中设置。选择“Data”页,就显示了设置数据断点的对话框。在编辑框中输入一个表达式,当这个表达式的值发生变化时,数据断点就到达。一般情况下,这个表达式应该由运算符和全局变量构成,例如:在编辑框中输入 g_bFlag这个全局变量的名字,那么当程序中有g_bFlag= !g_bFlag时,程序就将停在这个语句处。

消息断点:VC也支持对Windows消息进行截获。他有两种方式进行截获:窗口消息处理函数和特定消息中断。
在Breakpoints对话框中选择Messages页,就可以设置消息断点。如果在上面那个对话框中写入消息处理函数的名字,那么每次消息被这个函数处理,断点就到达(我觉得如果采用普通断点在这个函数中截获,效果应该一样)。如果在底下的下拉列表框选择一个消息,则每次这种消息到达,程序就中断。

值
Watch
VC
支持查看变量、表达式和内存的值。所有这些观察都必须是在断点中断的情况下进行。
观看变量的值最简单,当断点到达时,把光标移动到这个变量上,停留一会就可以看到变量的值。
VC
提供一种被成为Watch的机制来观看变量和表达式的值。在断点状态下,在变量上单击右键,选择Quick Watch,就弹出一个对话框,显示这个变量的值。
单击Debug工具条上的Watch按钮,就出现一个Watch视图(Watch1,Watch2,Watch3,Watch4),在该视图中输入变量或者表达式,就可以观察变量或者表达式的值。注意:这个表达式不能有副作用,例如++运算符绝对禁止用于这个表达式中,因为这个运算符将修改变量的值,导致软件的逻辑被破坏。

Memory
由于指针指向的数组,Watch只能显示第一个元素的值。为了显示数组的后续内容,或者要显示一片内存的内容,可以使用memory功能。在 Debug工具条上点memory按钮,就弹出一个对话框,在其中输入地址,就可以显示该地址指向的内存的内容。

Varibles

Debug
工具条上的Varibles按钮弹出一个框,显示所有当前执行上下文中可见的变量的值。特别是当前指令涉及的变量,以红色显示。

寄存器
Debug
工具条上的Reigsters按钮弹出一个框,显示当前的所有寄存器的值。

进程控制
VC
允许被中断的程序继续运行、单步运行和运行到指定光标处,分别对应快捷键F5、F10/F11和CTRL+F10。各个快捷键功能如下:
 
快捷键
说明
F5
继续运行
F10
单步,如果涉及到子函数,不进入子函数内部
F11
单步,如果涉及到子函数,进入子函数内部
CTRL+F10
运行到当前光标处。
Call Stack
调用堆栈反映了当前断点处函数是被那些函数按照什么顺序调用的。单击Debug工具条上的Call stack就显示Call Stack对话框。在CallStack对话框中显示了一个调用系列,最上面的是当前函数,往下依次是调用函数的上级函数。单击这些函数名可以跳到对应的函数中去。

其他调试手段
系统提供一系列特殊的函数或者宏来处理Debug版本相关的信息,如下:
宏名/函数名
说明
TRACE
使用方法和printf完全一致,他在output框中输出调试信息
ASSERT
它接收一个表达式,如果这个表达式为TRUE,则无动作,否则中断当前程序执行。对于系统中出现这个宏导致的中断,应该认为你的函数调用未能满足系统的调用此函数的前提条件。例如,对于一个还没有创建的窗口调用SetWindowText等。
VERIFY
和ASSERT功能类似,所不同的是,在Release版本中,ASSERT不计算输入的表达式的值,而VERIFY计算表达式的值。
关注
一个好的程序员不应该把所有的判断交给编译器和调试器,应该在程序中自己加以程序保护和错误定位,具体措施包括:
  • 对于所有有返回值的函数,都应该检查返回值,除非你确信这个函数调用绝对不会出错,或者不关心它是否出错。
  • 一些函数返回错误,需要用其他函数获得错误的具体信息。例如accept返回INVALID_SOCKET表示accept失败,为了查明具体的失败原因,应该立刻用WSAGetLastError获得错误码,并针对性的解决问题。
  • 有些函数通过异常机制抛出错误,应该用TRY-CATCH语句来检查错误
  • 程序员对于能处理的错误,应该自己在底层处理,对于不能处理的,应该报告给用户让他们决定怎么处理。如果程序出了异常,却不对返回值和其他机制返回的错误信息进行判断,只能是加大了找错误的难度。
另外:VC中要编制程序不应该一开始就写cpp/h文件,而应该首先创建一个合适的工程。因为只有这样,VC才能选择合适的编译、连接选项。对于加入到工程中的cpp文件,应该检查是否在第一行显式的包含stdafx.h头文件,这是Microsoft Visual Studio为了加快编译速度而设置的预编译头文件。在这个#include "stdafx.h"行前面的所有代码将被忽略,所以其他头文件应该在这一行后面被包含。
对于.c文件,由于不能包含stdafx.h,因此可以通过Project settings把它的预编译头设置为“不使用”,方法是:
  • 弹出Project settings对话框
  • 选择C/C++
  • Category选择Precompilation Header
  • 选择不使用预编译头
 
微软intelligent-terminal:Windows 的官方内置Agent Cli 作为官方出品,微软这回把 Copilot、Claude Code、OpenAI Codex、Gemini CLI 一视同仁,想接哪个 Agent CLI 都行,自己本地搭的也能用,完全不设门槛。但方便的同时也要注意安全,系统级的内置 Agent,比第三方的更强大,更底层,也就更危险。使用时,务必控制好权限,否则,自然语言级的病毒木马将泛滥。但对我来说,这依然不够。现在,终端和Agent融合在一个环境中了,Codex 可以操作上面的控制后台,发起命令,获取命令结果,不需要来换切换。 阅读详情

相关推荐

DevCAI SimpleButton / CheckButton 按钮实现分析

分析对象:DevCAI 自研的与(对应第 2.3 节“选项、按钮与状态”中同名组件)(2286 行,单文件承载整个按钮家族)分析日期:2026-11-05技术栈:VS2022 / .NET Framework 4.8.1 / C# 8.0(库代码语法不高于 C# 7.3)

大坡3D软件开发 147

Vc调试入门

概述调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。这里我简要的根据自己的经验列出调试中比较常用的技巧,希望对大家有用。本文约定,在选择菜单时,通过/表示分级菜单,例如File/Open表示顶级菜单File的子菜单Open。  设置为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWiza

timewolf的专栏 1165

【超详细】基于YOLOv8的PCB缺陷检测

印刷电路板(PCB)瑕疵数据集:是一个公共的合成PCB数据集,由北京大学发布,其中包含1386张图像以及6种缺陷(缺失孔,鼠标咬伤,开路,短路,杂散,伪铜),用于检测,分类和配准任务。本文我们选取了其中适用与检测任务的693张图像,随机选择593张图像作为训练集,100张图像作为验证集。

weixin_45679938的博客 2万+

软件工程 电子书 免费 下载

注:更多资料,尽在本人网盘 http://page1.yunfile.com/ls/baoquan1412/ http://filemarkets.com/file/baoquan1412/640831c0/][软件工程].曾强聪..pdf http://filemarkets.com/file/baoquan1412/9f00d695/][软件工程——技术、方法与环境]

Flex的专栏 6326

如何通过CAD图中的坐标来确定是哪个坐标系

地理坐标系:为球面坐标。参考平面地是椭球面,坐标单位:经纬度。以地球参考为例,坐标系就相当于整个地球,而地理坐标系就是椭球状的完整的立体地球。所以我们可以看到生活中的数据与地图是一定含有地理坐标系的,因为他是客观上来说确确实实存在的。投影坐标系:为平面坐标。参考平面地是水平面,坐标单位:米、千米等。这就相当于把地球当成一个橘子,然后一刀切开,把橘子皮平面铺开,这个过程就是地理投影的过程。严谨一点来说就是建立一个参考系统,按照对应位置把椭球体投射到平面。那坐标系统主要有那些呢?北京54。

vjmap的博客 2万+

UVM验证中,为什么我的pack_bytes()返回长度是0?手把手教你排查自定义do_pack函数

本文深入解析UVM验证中pack_bytes()返回长度为0的常见原因及系统排查方法。从UVM打包机制原理出发,详细列举了super.do_pack()缺失、field automation冲突等典型问题,并提供动态数组处理、位宽计算等进阶调试技巧,帮助开发者快速定位和解决自定义do_pack函数问题。

weixin_42523693的博客 127

软件工程3

我和我的伙伴在编辑中遇到的种种问题,比如如何给你的源代码建立分支?如果需要做一个演示,演示版本的分支中对各处的代码做了一个临时的修改, 同时,主要的分支还保持原来的计划开发。怎么做到?在演示之后,演示版本的有些修改应该合并到主分支中,有些则不用,怎么做到的? 我们翻阅书籍,查阅网络,请教大神,配合修改bug,在不断的完善中也成功的充实了自己的知识面。

qq_34404530的博客 1459

哈密顿-雅可比不等式:连接最优控制与优化算法的自然物理原理

在控制理论与优化算法之间,存在一个深刻而实用的桥梁。最优控制理论旨在通过设计控制输入,使动态系统在时间维度上达到性能最优,其核心数学工具如庞特里亚金极大值原理和哈密顿-雅可比-贝尔曼方程,为解决连续时间系统的优化问题提供了优雅框架。然而,这些方法在高维非凸问题中面临求解难题。哈密顿-雅可比不等式作为一种松弛方法,通过构造李雅普诺夫函数并验证一个不等式条件,转而寻求性能有保障且易于实现的次优解,其本质是保证系统能量衰减和性能上界。这一原理与耗散性理论紧密相连,体现了自然物理系统(如阻尼振动)中能量耗散的普遍规

weixin_30582943的博客 313

软件工程专家(左春的专栏)

http://blog.csdn.net/zuochun

编程开发资料库 257

Win11注册表没有MMC的解决方法

本文详细介绍了在Win11系统中解决注册表没有MMC项的问题的方法。通过创建并导入注册表修复文件,我们可以成功地在注册表中添加缺失的MMC项。在操作过程中,需要注意备份注册表、以管理员身份运行工具以及系统更新等事项。希望本文能够帮助到遇到类似问题的用户,提高系统管理的效率和便捷性。如果你还有其他关于Windows操作系统的问题或疑问,欢迎随时提问并寻求帮助。

nntxthml的博客 1552

VL53L0X加盖玻片后精度暴跌?手把手教你完成串扰校准(CrossTalk Calibration)

本文详细解析了VL53L0X激光测距传感器加盖玻片后精度下降的原因,并提供了串扰校准(CrossTalk Calibration)的完整解决方案。通过分步指导和实用代码示例,帮助工程师恢复毫米级测距精度,适用于智能门锁、扫地机器人等应用场景。

weixin_33708432的博客 539

设置ODBC的自定义类CSetODBC

何志丹一,功能描述用于配置数据源用户名及密码.1,可以得到连接串,此串可用于CMyRecordset(派生于CRecordset)的GetDefaultConnect(),也可以用干CDataBase类OpenEx.2,如果用户配置正确,只需要配置一次,相关信息记录在文件.3,可以指定存储信息的文件名.因为有可能几个程序共用一个数据源.4,用户可以重新配置数据5,可以得到当前数据的类型.6

闻缺陷则喜何志丹 3105

pytorch 51 GroundingDINO模型导出tensorrt并使用c++进行部署,53ms一张图

博主基于https://github.com/hpc203/GroundingDINO-onnxrun项目分享的onnx c++推理代码,修改为GroundingDINO模型的tensorrt推理代码。对于600x400的输入,在3060显卡下,cuda 12.1,TensorRT-10.4.0,window环境下53ms处理完一张图片。

a486259的博客 1220

微软技术日报 2026-11-05:安装器变现链被拆开、OneLake 托管 MCP、Agent 365 进 Gartner 象限

把这几条放在一起看,共同点是把已经铺开的东西补上治理。安装器那条最直白。用户自己点开的程序,装完还会往回连,落地的东西藏在计划任务里、Program Files 里,用户不知道。微软给的检测思路也是往这个方向走的,看临时目录、看回调、看 SYSTEM 任务,而不是追域名。OneLake 那条是给 agent 补路标。以前每种 item 类型都要维护一份端点清单,现在让服务自己报出来。好处是 agent 不用猜,代价是判断责任转移到了客户端,技能要不要加载得自己决定,标签也不能当成授权。

海盗Sharp的博客 1323

DeepSeek+即梦:AI视频创作从0到1全突破

本文为 DeepSeek 与即梦生成视频全攻略,从前期注册登录、熟悉工具界面及硬件网络准备入手,助读者开启 AI 视频创作。详细阐述利用 DeepSeek 构思脚本、即梦实现画面生成与静态图转动态视频的方法,包括提示词编写、参数调整等技巧。同时介绍后期合成音画、添加字幕特效及多平台适配要点,结合实战案例解析全流程。还分享进阶提示词优化、版权注意等避坑指南,为创作者提供从 0 到 1 的 AI 视频创作完整解决方案。

邓邓子的博客 8099

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

微软技术日报 11-08:Foundry 与 Entra 各挂一个 10.0 分漏洞,Foundry 接 fal 五款视频模型

这一周的动作可以分成两类。一类在收。Copilot 从电视上退场,搜索里的 AI 改成可选,云端漏洞只发通知不收补丁。共同点是承认铺得太开,代价比预期高。另一类在放。Foundry 一次摆上五个视频模型,容器版应用网关一个入口挂 64 个 MCP 服务器。共同点是把能力做成可组合的积木,让使用者按需挑。两个方向背后是同一个判断。把能力塞到每一个界面上,短期看覆盖率高,长期要解释为什么删不掉。新的做法是先给一个能关的开关,再谈覆盖。对每天写代码的人来说,今天有两样现成的东西可以试。

海盗Sharp的博客 336

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

微软常用运行库合集免费下载安装教程(附运行库安装包)微软运行库安装图文教程

系统装完后出现“丢失xxx.dll”错误,多因缺少微软运行库所致。微软常用运行库合集将2005至2022年主流版本打包,一键安装,覆盖绝大多数软件依赖。无需判断版本,全选安装即可,装完建议重启。该合集可重复安装,不冲突,且与系统自带组件共存。适用于刚装系统的用户,能有效解决软件打不开、闪退等问题。

kk_net8899的博客 158

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【测评】SenseNova6.8Flash模型正式发布,支持动态 PPT 及 3D 设计

SenseNova 6.8 Flash将设计生成拓展至多种创作形态,支持Web、SVG、Three.js、Blender、PPT等形式,满足多样化的AI Native Design需求,并支持动态PPT、动态Poster与Agentic 3D设计。同时,模型可接入Figma等专业工作流,帮助用户将AI设计能力融入现有的专业设计流程。此外,模型还支持三维场景与交互内容创作,可综合处理空间布局、材质与光照、镜头控制及动画编排等因素,构建可在网页中实时渲染的三维内容,拓展从立体视觉展示到动态交互的表达方式。

Enweitech Software Works 300

微软推出 dotnetup:多版本管理更省心~

这是一个官方出品的.NET 工具链管理器,目前处于公共预览阶段,定位类似 Rust 生态中的 rustup。‌‌。

Enweitech Software Works 364

Qt窗口:对话框:模态、非模态、混合属性;内置对话框:消息、颜色、文件、字体、输入

对话框:模态exec、非模态show、混合属性setModal(true)+show;内置对话框:消息QMessageBox、颜色QColorDialog、文件QFileDialog、字体QFontDialog、输入QInputDialog

Wangshijie1015的博客 240

微软技术日报 2026-11-03:冒牌 Claude Code 扩展留后门、Fabric 数据工程 agent 进预览、Access IE 控件定退场

微软安全博客在 10 月 30 日复盘了一起扩展市场供应链事件:一个冒用 Anthropic 名字的 Cursor 扩展,在被下架之前挂了约 11 个小时。它做的事情不复杂,装完之后在你机器上开一条反向 SSH 隧道,留三处开机自启,再把主机信息发回一台固定 IP 的服务器。同一天前后,微软在 Fabric 社区大会巴塞罗那站把数据工程 agent(Project Osmos)放进了公共预览,在乌镇拿了一个奖,Access 团队则给一个用了二十年的浏览器控件定了退场日期。

海盗Sharp的博客 407

微软确认支持的 Windows 10 可直接升级 Windows 11 26H2

2026年10月28日,微软宣布Windows 11 26H2更新已全面推送至所有符合条件的设备,包括部分Windows 10系统。该版本带来更低内存占用与更流畅体验,支持从24H2、25H2原地升级,可通过eKB5121794启用包或官方MCT工具手动升级。全新安装可使用KB5127648 ISO镜像。更多资讯请关注简鹿办公。

jianlu365的博客 188

微软 BioEmu2 实测:AI 设计的抗体,能否通过动态模拟提前筛选?

微软 BioEmu2 实测:AI 设计的抗体,能否通过动态模拟提前筛选?**2026 年 10 月 26 日,展示了一个 AI 抗体候选的 10 纳秒传播动画。**但这个案例留下的最大问题,仍是实验室门前那道选择题:一批看起来合理的设计,究竟该把哪几个送去测试?Ford 正在参与 Adaptyv 与 Anthropic 的蛋白设计竞赛,也在开发抗体语言模型。**但他在原文中坦言,生成候选容易,挑出值得测试的候选依然困难。**本文解读他的公开实测,并对照微软文档核查证据边界,未独立运行模型。

weixin_71777199的博客 176

微软技术日报 2026-11-02:开发者环境服务退役、Defender 清点本地 AI 代理

从这里开始,五分钟看完微软技术圈一夜之间的变化。

海盗Sharp的博客 458

视频美颜sdk的API设计会影响开发效率吗?

视频美颜SDK不仅需要具备优秀的图像处理能力,API接口设计同样会影响软件开发效率。本文从接口调用、参数配置、版本兼容、开发文档以及业务扩展等多个角度,分析API设计对视频美颜SDK集成和后期维护的实际影响,为直播APP、视频社交平台等项目的SDK选型与技术开发提供参考。

wanyuekeji的博客 196

微软技术日报 2026-11-04:8GB 专属优化、38 万漏洞利用统计、NuGet 包带技能

11 月的第一周,微软把注意力放回了最不显眼的那批机器。11 月 3 日,Windows 官方博客发出一篇由 Pavan Davuluri 署名的文章。他是微软执行副总裁,负责 Windows 与设备。文章的题目直白得少见,讲的是怎么把 8GB 内存的 Windows 11 电脑拉到及格线以上。同一天,.NET 博客在讲另一件事,怎么把 agent skills 塞进 NuGet 包。11 月 2 日,微软安全研究发了一份跨 27 年的漏洞利用统计。

海盗Sharp的博客 421
上一篇: 彩色图像转YUV格式序列存取(陆)
下一篇: 任务签到表(2006.11.20)
TargetStudio
博客等级 码龄20年 3粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值