《软件调试》笔记

本文详细介绍了软件调试的各个方面,包括插装技术、调试机会、用户态调试器的使用、调试规则以及各种调试工具。内容涵盖了从理解需求到回归测试的全过程,强调了分而治之和黑盒、白盒测试策略。此外,还讨论了内存管理、栈溢出、内存泄漏等问题,以及静态检查和静态分析在提升代码质量中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、插装——开发人员编写的额外代码,来提高程序的可观察性和可控制性。


二、发现bug的机会

1)可调试的源代码(2)插装(3)宏定义(4)编译器标志(5)静态检查器

6)选择的库(7)链接器选项(8)代码插装工具(9)测试用例/输入数据

10)调试器:源代码、剖析、内存读取、操作系统调用跟踪器(如trussstrace


三、用户态调试器——查看调试目标状态

1、运行中的线程、内存、寄存器以及在进程空间中打开的内核对象

2、修改调试目标状态:改变线程的执行顺序,修改寄存器的内容,修改内存的内容,接收在目标进程中发生的特定事件。

3、分析包含进程快照的转储文件

4cdb.exe——CDB,基于字符界面的控制台程序

5ntsd.exe——一个GUI程序并可创建自己的控制台(NTSD

6windbg.exe——图形界面调试器


四、调试规则

1理解需求2、制造失败3、简化测试用例4、读取恰当的错误信息5、检查易见的问题

6、从解释中分离出事实7、分而治之8、工具要与bug匹配9、一次只做一项更改

10、保持审计跟踪11、获得全新观点12bug不会自动修复13、回归测试来检查bug修复


回归测试——通常是一组脚本的集合,它执行稳步增加的测试集,结果是两个清单,一个列出通过的测试,一个失败的测试。每次添加新功能或修复了一个bug时,都应该增加测试。

分而治之——(1)整理一份清单,列出潜在问题以及如何调试他们。

(2)将环境更改和源代码更改区分开。

(3)放大并治之。(同步比较两个版本的数据、日志文件和控制流)

黑盒——验证组件。预期功能。忽略实际实现,很好的移植性。

白盒——测试实际边界情况。


1、自己尝试再现相同的bug——分析错误描述和日志文件。

2、现场调试——源代码文件,在函数中设置断点,走查程序的运行,获取栈的跟踪信息,获取或设置变量。

3、远程连接——WebExVNC,客户机运行可调试的软件,源代码在调试者电脑上。

符号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值