软件调试笔记1 - 软件调试基础: 分类,调试技术概览

软件测试基础知识整理(详细版) 一、软件测试概述 1、软件缺陷 软件缺陷:又称之为“Bug”。即计算机软件或程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。 缺陷的表现形式: 软件没有实现产品规格说明书所要求的功能模块; 软件中出现了产品规格说明指明不应该出现的错误; 软件实现了产品规格说明中没有提到的功能需求; 软件没有实现虽然产品规格说明没有明确提及但应该实现的目标; 软件难以理解、不易使用、运行缓慢、用户体验不友好; 产生软件缺陷的原因: 需求不清晰; 系统结构较为复杂; 对程序逻辑路径或者数据范围考虑不全面 阅读详情

分类:

软件调试有多种分类方法。

按调试目标的系统环境分 - Windows下调试,Linux下调试,DOS下调试等等。

按目标代码执行方式分 - 脚本调试(不需要编译的语言),需要编译的又分位俩种 - 1. 先编译为中间代码,在运行时候再动态编译成目标代码的,称为托管调试,2. 直接编译和链接成目标代码的,称为本地调试。两种混合起来i一起调试的叫混合调试。

按目标代码执行模式分 - 用户态调试, 内核态调试。

按调试器跟调试目标的相对位置分 - 本地调试,远程调试。

按调试目标的活动性分 - 活动目标调试,转储文件调试(Dump文件)。

按调试工具分 - 使用调试器的软件调试,不使用调试器的软件调试。


调试技术概览:

1. 断点

几种分类,

根据断点的设置空间分:

代码断点:设置在内存空间,地址是某一段代码的起始处。

数据断点:设置在内存空间,地址是要监视数据的起始地址。

I/O断点:设置在I/O空间,地址为某一个I/O地址。当程序访问指定I/O端口的时候中断到调试器。跟数据断点一样,都可以设置触发时候的访问宽度。


根据断点设置方法分:

软件断点:向指定的代码位置插入专用的断点指令,比如INT 3。

硬件断点:通过设置CPU的调试寄存器来设置。IA32 CPU定义了8个调试寄存器,DR0-DR7,可以同时最多设置4个硬件断点(对于一个调试会话)。通过硬件断点可以设置任意的设置空间的断点,但是断点指令只能设置代码断点。


当中断到调试器时,系统或者调试器会将被调试程序的状态保存到一个数据结构中,称为上下文context。


追踪点tracepoint是断点的一种衍生形式。基本思路是当设置一个追踪点时,调试器内部会当作特殊的断点来处理。当执行到追踪点的时候,系统会向调试器报告断点事件,在调试器收到后,会检查内部维护的断点列表,发现目前发生的是追踪点后,便执行这个追踪点所定义的行为,通常是打印提示信息和变量值,然后直接恢复被调试程序执行。所以调试者感觉不到被调试程序中断到调试器的过程。


条件断点: 当用户设置了一个条件断点时,调试器实际插入的还是无条件断点,在断点命中,调试器收到调试事件后,调试器会检查这个断点的条件,如果满足就中断,否则恢复被调试程序。


2. 单步执行

分为单步指令,单步代码句,单步分支和单步任务(多线程使用)。


3. 输出调试信息

打印和输出调试信息是简单而古老的软件调试方法,基本思想是用代码把信息以文本的形式输出到一个可观察的地方比如控制台,窗口,文件,或者调试器。

优点:简单方便,不依赖于调试器跟复杂的工具。

缺点:需要添加代码,影响执行效率,信息有限,容易泄漏程序技术细节。

在Windows系统中,驱动程序可以使用DbgPrint/DbgPrintEx来输出调试信息,应用程序可以使用OutputDebugString,控制台程序可以使用print函数来打印。


4. 日志

与输出调试信息类似,基本思想是编写程序的时候加入特定的代码将程序运行状态信息写到日志文件或者数据库。Windows系统提供了基本的日志记录,观察和管理功能Event Log。


5. 事件追踪

3跟4都是以文本形式的,不适合处理数据庞大且速度要求高的情况。事件追踪机制Event Trace正是针对这个需求设计的, 它使用二进制形式来记录数据,观察时再转化成问基本形式。适用于监视频繁且复杂的软件过程,比如监视文件访问,网络通信等。ETW (Event Trace for Windows)是Windows内建的一种,很多WINDOWS下的工具比如TCPIPView都使用了该机制。


6. 转储文件

转储文件用于将发生问题的时候系统状态像拍照片一样保存下来,分为小,中,大几种规格,最小的叫Mini Dump。WINDOWS S提供了为应用程序和整个系统产生转储文件的机制,可以在不停止程序或者系统运行的情况下生成转储文件。


7. 栈回溯

目前主流CPU架构都是使用栈来进行函数调用的,栈上记录了函数的返回地址,因此通过递归寻找放在栈上的函数返回地址,就可以找到当前线程的函数调用序列,产生

call stack。因为返回的只是地址,所以可以通过调试符号文件symbol将返回地址翻译成函数名。


8. 反汇编

将目标代码翻译成汇编代码。有很多工具,比如IDA, interactive disassembler。







DPAA PCD策略配置详解:key、queue与classification实战指南 在网络数据包处理领域,流量分类与队列调度是保障系统性能与服务质量的核心技术。其原理在于通过硬件或软件识别数据包的特定特征(如协议类型、IP地址、端口号),并依据预设策略将其引导至不同的处理队列,从而实现流量管理、负载均衡与服务质量保证。这项技术的核心价值在于将繁重的包处理任务卸载至专用硬件,实现线速、确定性的转发,对于构建高性能路由器、交换机及智能网卡至关重要。应用场景广泛覆盖数据中心网络、边缘计算、车载网络及工业互联网等对实时性与可靠性要求严苛的领域。本文聚焦于NXP DPAA架构中的策略分类与分发模块, 阅读详情

相关推荐

【C++软件调试技术】dump文件类型与dump文件生成方法详解

dump文件类型与dump文件生成方法详解。

dvlinker的技术专栏 2万+

软件调试技术概览

本文摘抄自张银奎老师的软件调试一书,主要概述各种常用的软件调试技术。

qq_40569221的博客 1511

软件调试的技术

介绍了GDB、DDD等调试工具,一本较好的入门数据,值得一看

深夜福利?9种软件调试技术!

软件调试技术包括以下9种: 1、分析和推理; 设计人员和开发人员根据软件缺陷问题的信息,分析和推理调试软件。 根据软件程序架构自顶向下缩小定位范围,确定可能发生问题的软件组件。 根据软件功能,软件运行时序定位软件问题。 根据算法原理,分析和确定缺陷问题发生的根源。 2、归纳类比法; 归纳法是一种从特殊推断一般的系统化思考方法,归纳法调试的基本思想是:从一些线索(错误征兆)着手,通过分析它们之间的关系来找出错误。该方法主要是根据积累的工作经验和案例处理调试工作。 根据工作经验和比对程序设计中类似

Yummy的博客 3534

16QAM调制解调仿真(matlab,详细介绍仿真方案的设计、结果及结论、完整代码及注释)

16QAM调制解调仿真目录一、仿真要求二、仿真方案详细设计三、仿真结果及结论四、仿真代码 一、仿真要求 1.用基带等效的方式仿真16-QAM在AWGN信道下的误码率和误比特率性能,并与理论值相比较; 2.高阶与低阶的性能比较。 二、仿真方案详细设计 三、仿真结果及结论 仿真结果 16QAM的星座点图 64QAM的星座点图 16QAM加噪声后的星座点图 64QAM加噪声后的星座点图 16-QAM载波调制信号在AWGN信道下的误比特率性能比较 结论:由图可知,16QAM的误符号率

mango 5万+

AI智能体安全沙箱agentguard:为LLM代码执行筑起防火墙

在AI应用开发领域,大语言模型(LLM)驱动的智能体(Agent)能够自动生成并执行代码,极大地提升了自动化能力。然而,赋予AI直接执行系统命令的权限也带来了显著的安全风险,如恶意代码注入、敏感数据泄露和系统资源滥用。为了解决这一核心矛盾,安全沙箱技术应运而生,它通过在不可信代码与宿主系统之间建立隔离层,实现"默认拒绝、最小权限"的安全原则。agentguard项目正是这一理念的工程实践,它结合白名单机制与容器化隔离,为AI智能体提供了可配置、可审计的安全执行环境。该方案不仅适用于内部自动化工具开发,也为构

weixin_28695537的博客 296

软件调试技术组成

软件调试技术包括 强行排错法 回溯法 原因排除法

weixin_43636211的博客 1113

基于STM32的智能衣柜系统开发实战(附完整源码与硬件设计)

本文详细介绍了基于STM32的智能衣柜系统开发实战,包括硬件设计、软件架构和云端功能实现。系统具备实时温湿度监控、自动加热除湿、紫外线杀菌等核心功能,通过STM32F103C8T6主控芯片和ESP8266无线模块实现智能控制。附完整源码与硬件设计,适合科技爱好者和开发者参考。

peach的博客 779

软件工程选择题_关于调试,下列说法正确的是 a、 从一个侧面证明程序员的失败 b、 受时间约束的 c

以下语言中较适用于数值计算的语言是( D)以下语言中较适用于数值计算的语言是(D )6.若一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出就是下一功能元素的输入,则该模块的内聚性类型是 ( C )6.若一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出就是下一功能元素的输入,则该模块的内聚性类型是 ( C )6.若一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出就是下一功能元素的输入,则该模块的内聚性类型是 ( C )

2401_84254474的博客 1621

三角洲自动购买工具 —— 基于 OCR 的价格识别与自动点击

通过的方式,我们可以轻松实现自动化的“价格监控 + 自动点击”工具。它的优势在于通用性—— 只要能截屏识别价格,就能用于任何程序,不依赖特定 API。未来可以扩展的功能:自动保存配置到文件。支持多价格区域检测。增加快捷键启停功能。

qq_62975494的博客 2417

Verilog基础知识11(异步FIFO为什么使用格雷码(gray-code) )

需求说明:Verilog设计 内容       :第一部分 异步FIFO为什么使用格雷码                   第二部分 格雷码在异步FIFO中的使用 来自       :时间的诗 第一部分 异步FIFO为什么使用格雷码 原文:http://www.cnblogs.com/kxk_kxk/p/3931591.html 异步FIFO通

时间的诗 8888

嵌入式软件调试技术--1--概览

用于记录嵌入式软件调试基础概览,用于了解。

qq_25594303的博客 1220

2、通过mos管构成的逻辑门电路

一、总结 mos管 是构成 逻辑门电路 的最基本单元。 各个逻辑门电路的真值表如下: 二、各种门 1、非门 NOT 2、与门 AND 3、与非门 把上面与门电路 右边的 非门电路 去掉 NAND 4、或门 OR 5、或非门 NOR 把或门右边的非门电路去掉 6、异或门 XOR 两个输入相异为1,相同为0。 7、同或门 XNOR 两个输入相同为1,相异为0。 ...

engineer0的博客 4万+

软件调试基础

软件调试基础 软件调试的基本手段有:断点、单步执行、栈回溯等。 其初衷是跟踪和记录CPU执行软件的过程,把动态的瞬间凝固下来供检查和分析 **Bug一词来源:** “Bug”的创始人格蕾丝·赫柏(Grace Murray Hopper),是一位为美国海军工作的电脑专家,也是最早将人类语言融入到电脑程序的人之一。 而代表电脑程序出错的“bug” 这名字,正是由赫柏所取的。 1947年9月9日,赫柏对...

qq_36308972的博客 971

交流伺服电机绝对式位置控制实战指南

伺服电机控制是工业自动化的核心技术之一,其核心原理是通过闭环反馈实现精确位置控制。绝对值编码器作为关键传感器,能提供单圈内的绝对位置信息,避免了增量式编码器的累计误差问题。在工程实践中,电子齿轮比配置、位置环PID调节等技术直接影响系统动态性能。本文以包装机械为典型场景,详细解析了从硬件选型到参数整定的全流程实现方案,特别是针对单圈绝对值编码器初始化和限位保护等易错环节,给出了经过验证的解决方案。通过合理设置17位编码器的电子齿轮比和优化运动控制算法,最终实现了±0.05°的高精度定位。

weixin_42531588的博客 281

2025年华为杯D题:低空湍流监测及最优航路规划思路与Matlab实现

2025年华为杯D题:低空湍流监测及最优航路规划思路与Matlab实现

前程算法屋的博客 771

软件调试基础(一【1-5】)

在程序执行路径或数据访问路径上设置“陷阱”,使程序暂停执行并进入调试器,供调试者分析程序状态。

stupid的博客 717

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

《软件调试》学习笔记——003 (第一章 软件调试基础 part1)

《软件调试》学习笔记——003 (第一章 软件调试基础 part1)   软件调试的分类: 按操作系统,可分为Windows下的调试、linux下的调试、dos下的调试.... 按目标代码的执行方式,分类: 本书主要讨论本地调试(Native Debugging)。注意这里的"本地"不是和远程调试相区分的"本地" 按被调试程序运行的模式,可分为用户态调试和内核态调试。 按调试器与调

EasyVCR的专栏 1054

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

软件调试 笔记1

-----------------------------《软件调试》前言--------------------------------------------------------------------------- 指令集(Instruction Set):一台计算机认识的所有指令 程序:按照一定格式编写的指令序列 通用计算机:同一台计算机,执行不同的指令,就可以完成不同的任务

shyandsy的无边海洋 747

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

《软件调试》学习笔记——004 (第一章 软件调试基础 part2)

《软件调试》学习笔记——004 (第一章 软件调试基础 part2) 常用软件调试技术: 1) 断点(Breakpoint) 断点和单步执行是最基本的调试手段。其基本思想是让被调试程序在执行到该处时,暂停被调试程序的执行;中断到调试器中,让调试人员进行分析。分析结束后,可以让被调试程序继续执行。 根据断点所处的空间,可以分为以下3种断点: 代码断点 设置在内存空间的代码段(

EasyVCR的专栏 1085

软件调试基础(一【5】)

单步执行是调试中用于逐条跟踪程序执行过程的核心技术,通过精细控制程序执行流程,帮助开发者观察代码动态行为。调试器利用符号文件中的行号信息,判断程序指针(IP)是否跨越语句边界,自动重复触发汇编级单步。保存中断时程序的状态(寄存器值、指令指针、标志位等),是分析问题的关键依据。:在代码中插入调试语句,将变量值、执行路径等信息输出至控制台、文件或调试器。断点的特殊形式,触发后自动执行预设动作(如打印变量值、记录日志),(后续章节展开):如内存分析、单步执行、日志调试等。

stupid的博客 960

调试之乐——《软件调试》卷1序言

在900多年前的一个秋夜,一轮明月高高地挂在黄州的天空。夜深了,很多人都已经入睡。但在承天寺的庭院里,还有两个人在散步。他们一边交谈,一边欣赏美丽的夜景。洁白的月光泼洒在庭院里,像是往庭院里注入了一汪汪清水,把地面变成了水面,清澈透明。翠竹和松柏的影子映在其中,随风摇摆,仿佛水草在晃动。这两个人,一位是大文豪苏轼,另一位是他的好朋友张怀民。这一年是1083年,苏轼46岁。 可能是在当晚,也可能是在第二日,苏轼写了一篇短文来记录这次夜游。这篇短文便是著名的《记承天寺夜游》。第一次看到这篇散文,我便爱不释手。每

advdbgger的博客 573

keil调试串口的软件仿真方法

keil调试串口的软件仿真方法 (2016-01-21 11:27:31) 转载▼ 标签: stm32 keil 虚拟串口 调试 分类: MCU 1.Keil 里面先对串口编程,以下假设你已经设定串口的参数为 9600,n,8,1 2.下载一个虚拟串口软件 vspd,安装后config一下,增加一对串口,比如下图的 COM2<-->COM3 3. Keil 里面给两条指令 (调试状态下) MODE COM2 9600,0,8,1...

位文杰的博客 2万+

【笔记】软件测试基础

软件测试【基础】 1.软件和软件分类 软件:是程序、数据和相关文档的集合 软件的分类: 按层次划分:①系统软件(与硬件关系密切) ②应用软件 按组织划分:①商业软件(程序代码不开放) ②开源软件(程序代码开放) 按结构划分:①单机软件 ②分布式软件(多台机器联网使用) 2.软件缺陷的定义 软件未实现产品说明书要求的功能 软件出现了产品说明书指明不应该出现的功能 软件实现了产品说明书未提及到的功能 软件未实现产品说明书虽未明确提及但应该实现的目标 软件难以理解、不易使用、运行缓慢或者(从测试的角度

Gu_jiaguaren的博客 352

【软件测试】软件测试基础培训

软件测试的基础,方法和执行分析。

加油站发光博主 2031

软件测试基础学习

1.软件和软件测试 软件组成: 程序 数据 文档 软件的分类 按层次划分:系统软件、应用软件 按组织划分:商业软件、开源软件 按结构划分:单机软件、分布式软件 2.软件测试的定义 正向思维 出发点:使自己确信产品是能够正常工作的评价一个程序和系统的特性或能力,并确定它是否达到期望的结果,软件测试就是以此为目的的任何行为。 反向思维 Glenford· J·Myers 《软件测试的艺术》 出发点:测试是为发现错误而执行一个程序或者系统的过程 测试是为了证明程序有错,而不是证明程序无错误 一个好的

weixin_44129933的博客 8751
上一篇: WinDbg学习笔记十一 - 内核调试常用命令5 - 对象相关
下一篇: decltype操作符
imJaron
博客等级 码龄11年 121粉丝 286原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值