比写代码难多了!与bug斗法的人都有什么神仙技能?( 二 )


3.打印输出调试信息
这是一种很普遍的软件调试方式 。 其基本思想是在程序中编写专门用于打印调试信息的语句 , 将程序运行的位置、状态和变量值打印出来 。 在Windows中 , 驱动程序可以通过Dbgprint/DbgPrintEx来打印调试信息 。 应用程序可以通过OutputDebugString来打印调试信息 。 控制台程序可以通过print打印 。
4.日志
与输出调试信息类似 , 日志是另一种辅助调试手段 。 其基本思想是在程序中加入特定代码将程序运行的状态信息写到日志文件或数据库中 。
5.事件追踪
打印调试信息和日志都是以文本的方式输出和记录信息的 , 因此不适合处理数据量庞大且速度要求高的情况 。 而事件追踪机制这是对这一需求而设计的 。 它使用结构化的二进制来记录数据 。 观察时在转换成文本形式 。 它非常适用于监视频繁且复杂的软件过程 。
6.栈回溯
目前主流的cpu架构都是使用栈来进行函数调用的 。 栈上记录了函数的返回地址 。 通过递归式的寻找放在栈上的函数的返回地址 , 便可以追溯出当前线程的函数调用序列 。 这就是栈回溯的基本原理 。
7.反汇编
反汇编是将目标代码翻译成汇编代码 。 符号文件对于反汇编具有重要意义 。 反汇编工具可以通过调试符号得到函数名称或是变量名称 。 这使得汇编代码具有良好的可读性 。 WinDbg的u和ul命令用于反汇编 。
8.观察和修改数据
观察被调试程序的数据是了解程序内部状态的一种直接方法 。 很多调试器提供了查看和修改数据的功能 。 WinDbg的d和e系列命令用以查看和修改数据 。 r系列命令可以修改和查看寄存器值 。
在掌握这些技术的基础上 , 从业者还需多实战 , 在实际的项目中多积累经验 , 提升对系统和代码的整体认识 。
谈软件调试的实战 , 这本被业界称为“百科全书”的调试书就必须安利给大家了!
2018年 , 知名软件调试技术专家张银奎将自己多年来的调试心得汇集于《软件调试 第2版 卷1:硬件基础》中 , 大量技术背景知识以及具有代表性的技术细节为饱受bug之苦的软件从业者拨开了云雾 。 这本书也自然而然在豆瓣评分中获得了9.0的高分!
比写代码难多了!与bug斗法的人都有什么神仙技能?文章插图
今年 , 同系列的卷2也隆重登场 , 围绕Windows平台调试的“生态”系统(ecosystem)、异常(exception)和调试器三条主线 , 介绍软件调试的相关原理和机制 , 探讨可调试性(debuggability)的内涵、意义 , 以及实现软件可调试性的原则和方法 , 总结软件调试的理论和最佳实践 。
图书推荐
比写代码难多了!与bug斗法的人都有什么神仙技能?文章插图
软件调试 第2版 卷2 Windows平台调试 上、下册
作者: 张银奎
软件调试 第2版 卷2 Windows平台调试 上、下册作者:张银奎
当当
软件调试 第2版 卷2 Windows平台调试 上、下册(异步图书出品)作者:张银奎
京东
内容简介:
本书是国内当前集中介绍软件调试主题的权威著作 。 本书第2 卷分为5 篇 , 共30 章 , 主要围绕Windows系统展开介绍 。 本书理论与实践结合 , 不仅涵盖了相关的技术背景知识 , 还深入研讨了大量具有代表性的技术细节 , 是学习软件调试技术的珍贵资料 。
本书适合所有从事软件开发工作的读者阅读 , 特别适合从事软件开发、测试和支持的技术人员阅读 。
比写代码难多了!与bug斗法的人都有什么神仙技能?文章插图
软件调试 第2版 卷1 硬件基础
作者: 张银奎
软件调试 第2版 卷1:硬件基础作者:张银奎
当当
软件调试 第2版 卷1:硬件基础(异步图书出品)作者:张银奎
京东
内容简介:
本书堪称是软件调试的“百科全书” 。 作者围绕软件调试的“生态”系统(ecosystem)、异常(exception)和调试器 3 条主线 , 介绍软件调试的相关原理和机制 , 探讨可调试性(debuggability)的内涵、意义以及实现软件可调试性的原则和方法 , 总结软件调试的方法和技巧 。
本书理论与实践紧密结合 , 既涵盖了相关的技术背景知识 , 又针对大量具有代表性和普遍意义的技术细节进行了讨论 , 是学习软件调试技术的宝贵资料 。 本书适合所有从事软件开发工作的读者阅读 , 特别适合从事软件开发、测试、支持的技术人员 , 从事反病毒、网络安全、版权保护等工作的技术人员 , 以及高等院校相关专业的教师和学生学习参考 。