程序的调试
一名优秀的程序员也是一名出色的侦探,每一次调试都是尝试破案的过程
目录
前言
一、什么是调试?
二、调试
1.调试是什么
2.基本步骤
三、调试注意事项
1.怎么写出易于调试的代码
assert(断言)
const
2.常见错误
总结
前言
主要是怎么调试,调试的注意事项,调试中常见的错误和遇到的问题
一、什么是调试?
第一次发现导致计算机错误的飞鹅:bug 英语单词“昆虫”的意思
二、调试
1.调试是什么
找代码里面问题的过程
一切发生的事都有迹可循
迹象越多越容易顺滕而上 (推理)
2.基本步骤
发现程序错误的存在
以隔离,消除等方法对错误进行定位
确定错误产生原因
提出纠正错误的解决办法
对程序错误改正,重新测试
基本选项了解:
debug调试
release发布版本(编译器自动优化)
IDE--集成开发环境
F5启动调试
F11逐语句(可以进入函数内部 细节)
F10逐过程
F9创建短点和取消断点(在多行程序或多文件适用),可以在程序任意位置设置断点
control+f5开始执行不调试
三、调试注意事项
调试的时候查看程序信息
一定要先开始调试,才能看到监视窗口!

观察内存:调试>窗口>内存

指针变量的内容和地址是不一样的,指针指向一个常量或变量,指针自己也占一个空间,有自己的地址,空间里的内容是所指常量或变量的地址
如下例:

?是随机值
反汇编能看到程序翻译成的汇编代码

查看临时变量:调试时会自动更新变量的值,使用起来不是很友好
查看调用堆栈
补充知识点:
数据结构中:
队:排队,后进前出
栈:栈帧,一堆,上进上出,(汉诺塔)
栈区:局部变量
堆区
静态区
栈区的使用习惯是先使用高地址处空间
1.怎么写出易于调试的代码
代码运行正常
bug少
效率高
可读性高
可维护性高
注释清晰
文档齐全
常见的coding技巧
使用assert(断言)<assert.h>
尽量使用const
养成良好的代码风格
添加必要注释
避免编码陷阱
assert(断言)
assert中可以放一个表达式,表达式的结果为假就报错,反之则不发生状况。可以利用assert来检测程序中的bug,如检测指针p的值是不是为null,但只能在debug环境下使用,在release中assert的报错会被自动优化。
const
const修饰一个变量时,变量被保护,不能再修改变量的值
const修饰指针时
放在*的左边,修饰指针变量指向的内容,表示指向指针的内容,不能通过指针来改变了;但指针变量本身可以修改
const int *p=#
*p=10;//err
p=&n;//ok
放在*右边,修饰指针变量本身,表示指针变量本身不能被修改;但是指针指向的内容可以通过指针来改变
int * const p=#
*p=10;/ok
p=&n;//err
2.常见错误
编译错误:直接有错误提示信息
链接错误:无法解析的外部符号
运行错误:能够调试的都是运行错误
总结
(未完待续....)
相关文章:
程序的调试
一名优秀的程序员也是一名出色的侦探,每一次调试都是尝试破案的过程 目录 前言 一、什么是调试? 二、调试 1.调试是什么 2.基本步骤 三、调试注意事项 1.怎么写出易于调试的代码 assert(断言) const 2.常见错误 总结 前言 主要是怎么调试,调…...
使用html 和javascript 实现微信界面功能2
1.功能说明: 对上一篇的基础上进行了稍稍改造 主要修改点: 搜索功能: 在搜索框后面增加了搜索按钮。 搜索按钮调用performSearch函数来执行搜索操作。 表单形式的功能: 上传文件: 修改为表单形式,允许用户通过文件输入控件选择文件并上传。 …...
虚幻引擎Actor类生命周期
AActor构造函数 在AActor类的构造函数中,虚幻引擎会初始化与该Actor相关的一些关键属性,比如: 默认的组件(如RootComponent、MeshComponent等)。默认的属性设置,例如位置、旋转、缩放等。还会调用BeginPlay等生命周期函数,但在构造函数中,这些函数不会执行。当你在场景…...
记录2024-leetcode-字符串DP
10. 正则表达式匹配 - 力扣(LeetCode)...
爬虫获取的数据如何有效存储和管理?
爬虫获取的数据如何有效存储和管理,涉及到数据的采集、存储、清洗、分析和保护等多个方面。以下是一些关键步骤和最佳实践: 1. 数据采集与同步 API接口同步:通过API接口将数据从数据源传输到目标位置,并保持数据的一致性和完整性…...
[Unity] AppLovin Max接入Native 广告 IOS篇
NativeIOS构建流程 (接入之前备份之前打包得Xcode工程) 下载资源 1.将以下文件放入Unity Assets->Plugins->IOS文件夹下 2.Unity更新max版本至12.4.1 UnityPlugin 6.4.3以上(很重要) 3.NativeSDKManager.CS根据以下附…...
康耐视智能相机(Insight)通过ModbusTCP发送字符串到倍福(BECKHOFF)PLC中
文章目录 1.背景2.分析3.实现3.1.PLC的ModbusTCP_Server3.1.1.安装TF6250-Modbus-TCP3.1.2.PLC设置 3.2.智能相机的ModbusTCP_Client3.2.1.了解ModbusTCP的协议3.2.2.根据协议写代码3.2.2.1.纯函数代码3.2.2.2.脚本代码 3.2.3.非脚本处理时的代码逻辑图3.2.4.关于代码的问题及解…...
TIFS投稿记录(IEEE Transactions on Information Forensics Security)
毕竟是CCF A类期刊,TIFS审稿有点慢,记录最近一篇论文的投稿时间线。 2024年10月27日:提交。 2024年11月12日:分配DE。 2024年12月3日:AE与SAE还未分配。发邮件催了催。 2024年12月5日:SAE已分配。AE: Not A…...
极越汽车,加速跌落
文丨梅元知 9月,极越销量2605辆;10月进一步攀升到3107辆,尽管11月略有回落,销量跌至2485辆,但对于一个品牌影响力尚未完全建立、销售渠道有限的新品牌而言,这样的表现已实属不易。然而,就在看似…...
深入解析MySQL事务隔离级别与锁机制在银行账户业务中的应用
一、引言 在金融行业,尤其是银行账户业务中,数据的一致性和安全性至关重要。MySQL作为一种广泛使用的数据库,其事务隔离级别和锁机制在保证数据一致性方面发挥着重要作用。本文将针对银行账户查询与转账业务,探讨如何运用事务锁来…...
postman可以通的请求,前端通不了(前端添加Content-type,后端收不到请求)
接口完成之后,自己使用postman测试了一下,没有问题; 可是在和小组前端调试接口的时候,他却说访问不了; 信息如下:(我自己写的一个打印请求信息的拦截器) 发现报错信息是: Content type ‘application/x-www-form-urlencoded;charset=UTF-8’ not supported 也就是说…...
【Java计算机毕业设计】基于SSM+VUE宠物领养管理系统【源代码+数据库+LW文档+开题报告+答辩稿+部署教程+代码讲解】
源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储:…...
排队论、负载均衡和任务调度关系
目录 排队论、负载均衡和任务调度关系 一、排队论 二、负载均衡 三、任务调度 四、总结 排队论、负载均衡和任务调度关系 排队论为负载均衡和任务调度提供了数学理论和方法支持 排队论、负载均衡和任务调度是三个相关但不同的概念。以下是对这三个概念的详细解释和它们之…...
智能客户服务:科技赋能下的新体验
在当今这个数字化时代,客户服务已经不仅仅是简单的售后服务,它已竞争的关键要素之一。随着人工智能、大数据、云计算等技术的飞速发展,智能客户服务正逐步改变着传统的服务模式,为企业和消费者带来了前所未有的新体验。 一、智能客…...
代码随想录第45天
115.不同的子序列 class Solution:def numDistinct(self, s: str, t: str) -> int:n1 len(s)n2 len(t)dp [[0] * (n1 1) for _ in range(n2 1)]for j in range(n1 1):dp[0][j] 1for i in range(1, n2 1):for j in range(1, n1 1):if t[i - 1] s[j - 1]:dp[i][j]…...
前端项目初始化搭建(二)
一、使用 Vite 创建 Vue 3 TypeScript 项目 PS E:\web\cursor-project\web> npm create vitelatest yf-blog -- --template vue-ts> npx > create-vite yf-blog --template vue-tsScaffolding project in E:\web\cursor-project\web\yf-blog...Done. Now run:cd yf-…...
3D 目标检测:从萌芽到前沿的技术演进之路
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在…...
Apifox 产品更新|支持发布多个文档站、文档站支持 Algolia 搜索配置、从返回响应直接设置断言
看看本次 这次版本更新主要涵盖的重点内容,有没有你所关注的功能特性: 「发布文档」升级为「发布文档站」 支持发布多个文档站 文档站支持 Algolia 搜索配置 支持从返回响应直接设置断言 用户反馈优化 解决恢复退出 App 时未关闭的标签页可能导致内存…...
Linux内核结构及源码概述
参考:深入分析LINUX内核源码 深入分析Linux内核源码 (kerneltravel.net) Linux 是一个庞大、高效而复杂的操作系统,虽然它的开发起始于 Linus Torvalds 一个人,但随着时间的推移,越来越多的人加入了 Linux 的开发和对它的不断完善…...
《探索C++在3D重建中的算法与技术要点》
3D重建作为计算机视觉领域的重要技术,在诸多行业有着广泛应用,而C以其高效性和对底层硬件的良好控制,成为实现3D重建算法的常用语言。以下是利用C进行3D重建的一些常见算法和技术要点。 多视图立体视觉算法 多视图立体视觉是3D重建的基础算…...
避坑指南:YOLOv8模型部署到小程序的5个常见错误及解决方案
YOLOv8模型部署到小程序的避坑实战手册 第一次把YOLOv8模型塞进小程序时,我盯着屏幕上那个"500 Internal Server Error"发呆了半小时。这已经是第三次部署失败了,Docker日志里那些红色错误信息像在嘲笑我的天真。后来才发现,原来只…...
PHP5.2下chunk_split()函数整数溢出漏洞 分析
受影响系统: PHP PHP < 5.2.3 不受影响系统: PHP PHP 5.2.3 描述: -------------------------------------------------------------------------------- BUGTRAQ ID: 24261 CVE(CAN) ID: CVE-2007-2872PHP是一种流行的WEB服务器端编程语言…...
别再乱传props了!UniApp项目里用Vuex管理用户登录和购物车状态,保姆级配置流程
UniApp实战:用Vuex重构用户登录与购物车状态管理 每次看到项目里十几个组件层层传递props,我都忍不住想吐槽——这简直就像用快递员接力运送同一份外卖!特别是在处理用户登录状态和购物车数据时,这种"击鼓传花"式的状态…...
1.3 开发环境搭建(West工具、Zephyr SDK、CMake)
001、开篇:为什么选择Zephyr RTOS与现代嵌入式开发工具链? 上周深夜调试一块STM32H7板子,串口突然吐出两行乱码后彻底静默。示波器抓供电正常,JTAG连上发现程序卡在某个静态数组初始化里——内存管理配置对不上芯片的实际SRAM分区。这种问题在传统RTOS环境里至少要翻半天手…...
拉孚Larfe机场人流联动照明系统节能数据成果展示发布
春运期间对比测试验证长期节能效益显著 2026年4月7日 —— 拉孚Larfe自主研发的“机场人流联动照明系统”在完成阶段性调试后,于今年春运期间开展了一次对比测试。为配合机场春运前的验收安排,系统于春节前暂时关闭,恢复为传统手动控制模式&…...
JavaScript this 关键字详解
JavaScript this 关键字详解 引言 在JavaScript中,this 是一个非常重要的关键字,它用来指代当前执行上下文中的对象。理解 this 的行为和作用域对于编写高效、可维护的JavaScript代码至关重要。本文将深入探讨 this 的概念、用法以及在不同场景下的表现。 什么是 this? …...
从零到一:借助MCP与Neo4j实现无代码知识图谱的快速落地
1. 为什么你需要无代码知识图谱 想象一下这样的场景:你手头堆积着大量会议记录、产品文档和客户反馈,这些信息就像散落的拼图碎片,彼此之间似乎存在某种联系,但你却找不到合适的方法把它们串联起来。传统的数据处理工具面对这种非…...
产教融合共建失智老年人照护实训室实践路径
本文围绕产教融合模式,结合失智老年人照护岗位实际需求,从合作机制、空间布局、设备配置、教学实施、运营保障五个核心维度,给出可落地的失智老年人照护实训室共建实践路径,兼顾实用性与可操作性,助力院校与企业高效共…...
别再肉眼找不同了!3步教你快速对比两个txt/word(即doc、docx)文档的差异
🚀 欢迎来到我的Office高效办公指南!📚 亲爱的访客,你好呀!👋 很高兴能在CSDN的海洋里与你相遇~ ✨ 无论你是正在摸索Office的「职场萌新」 💼,还是希望技能更上一层楼的…...
深入解析javac编译错误:程序包XXX不存在的排查与修复指南
1. 程序包XXX不存在的本质原因 当你第一次在命令行用javac编译Java项目时,90%的新手都会遇到这个灵魂拷问:"程序包XXX不存在"到底是什么意思?这行红字背后其实藏着三个关键信息:类加载器找不到对应的.class文件…...
