求知 文章 文库 Lib 视频 Code iProcess 课程 认证 咨询 工具 火云堂 讲座吧   成长之路  
会员   
 
 
 
全部课程 | 技术学院 | 管理学院 | 嵌入式学院 | 在线学院  
成功案例   品质保证  电话 English
追随技术信仰

随时听讲座
每天看新闻
 
   
成功案例
某集成电 多核体系的软件仿真
某电力能 设计模式原理及应用
南方航空 软件设计方法与实践
某跨国公 软件设计原理与实
爱立信( 软件设计
Moto 设计模式
北京 软件设计原理与实践

 

软件调试原理与实践    
张老师
著有《软件调试》,Intel研发中心资深程序员、业内资深工程师、内核调试专家
报名课程   3361 次浏览    1132 次 
地点时间: 北京 上海 深圳 根据报名开班
课程费用: 5000元/人 详见 公开课学习手册
企业内训: 可以根据企业需求,定制内训,详见 内训学习手册
 

调试是软件工程中的最重要环节之一,大多数程序员的约一半时间都花在调试上,但调试技术的交流与推广却没有得到应有的普遍重视。尤其是比较复杂的调试技术,比如内核调试,远程调试,DUMP 文件分析等,即使很多经验丰富的软件工程师对这些领域也都是比较陌生的。但了解和掌握这些调试技术,以及重要要的调试工具和技巧对提高软件工程师的综合实力却有着事半功倍的作用,是每个软件高手的一门必修课。

本培训纵览软件调试的整个“生态系统”,从CPU、操作系统、编译器和调试器四个纵向层次上对Windows 和Linux 平台上的调试设施和方法展开横向比较,从调试角度审视Windows,Linux,GCC,Visual Studio,GDB 和WinDBG 等著名平台和工具,既有深度,又有广度。整个培训理论讲解和实验演示紧密结合,由著名软件调试书籍《软件调试》一书的作者设计所有讲义并亲自讲授。

 
培训目标:
  • CPU 的调试支持
  • 操作系统的调试支持
  • 编译器的调试支持
  • 调试器
  • 应用程序崩溃和用户态转储
  • 栈调试
  • 堆调试
  • 内核调试
  • 系统崩溃和转储
  • 验证器
  • 多线程调试
  • 可调试性
培训对象: 软件开发工程师
学员基础:具有一定编码经验
授课方式: 小班授课(12人之内)+ 案例讲解 + 小组讨论,60%案例讲解,40%实践演练
培训内容: 2天
CPU 的调试支持

调试设施的简要历史,支撑软件调试核心功能硬件基础:

  • 断点指令、
  • 调试寄存器、
  • 陷阱标志
操作系统的调试支持

为什么要支持调试,比较Linux 和Windows 这两个操作系统支持用户态调试和内核态调试的基本设施,

  • 包括用户态调试模型,
  • 异常分发和管理,
  • 调试信息输出,
  • 错误记录,
  • 错误报告机制等内容。

试验1:通过内核调试理解操作系统内核 (30 分钟)

编译器的调试支持

本部分将以Visual Studio 和GCC 这两大著名编译器为例,比较介绍:

  • 调试符号的产生过程、
  • 存储格式和使用方法,
  • 编译期检查、
  • 运行期检查等内容。
调试器

比较介绍WinDBG 和GDB 调试器的:

  • 特点、
  • 实现模型,
  • 重要调试功能的实现方法,
  • 使用它们执行典型调试任务的方法,
  • 比较介绍常用的调试命令。
应用程序崩溃和用户态转储 介绍应用程序崩溃的完整过程和调试方法,
转储的基本知识,
如何使用ADPLUS 自动产生用户态转储,
用户态转储的常用命令和技巧。
[试验2] JIT 调试(30 分钟)
栈调试
  • 栈有关的基本概念
  • 栈的自动增长机制,
  • 栈上的缓冲区溢出
  • 检测缓冲区溢出的方法。
堆调试
  • 内存管理的多层次架构,
  • 比较Windows 和Linux 系统的堆管理器,
  • 导致堆问题的典型原因以及调试方法。
内核调试

内核调试模型,深入解析Windows 操作系统的内核调试引擎(KD):

  • 工作原理,
  • 关键
  • 操作,调试协议),
  • KD 的变体等;

比较介绍Linux 下的内核调试设施

系统崩溃和转储
  • 系统崩溃概览,
  • Windows 蓝屏崩溃(BSOD)的过程,Linux 的Panic 过程(包括产生call stack和寻找函数符号的方法),
  • 系统转储,分析系统转储的方法
  • 试验3:分析系统转储 (30 分钟)
验证器

验证器(verifier)的目标,Windows 操作系统的驱动验证器:

  • 工作原理,
  • 关键实现,
  • 用途
  • 思考借鉴和推广方法
多线程调试
  • 控制线程的常用命令,
  • 关键区,
  • volatile 关键字,
  • 死锁案例解析,
  • CPU 的同步支持(lock 前缀,特别指令),
  • 互锁操作
可调试性

被调试程序的可调试性对于提高调试效率有着重要意义,如何在软件工程实践中提高软件的可调试性:

  • 包括可观察性、
  • 可辨别性、
  • 可追溯性、
  • 自动报告错误等。
3361 次浏览   1132 次
其他人还看了课程
高质高效嵌入式软件开发  4074 次浏览
重构复杂遗留系统的最佳实践  3367 次浏览
软件调试案例精华集锦  3209 次浏览
编程匠艺训练营  2777 次浏览
单元测试实战训练营  2905 次浏览
HTML5 and JavaScript  4997 次浏览
定制内训
 



最新活动计划
MBSE(基于模型的系统工程)4-18[北京]
自然语言处理(NLP) 4-25[北京]
基于 UML 和EA进行分析设计 4-29[北京]
以用户为中心的软件界面设计 5-16[北京]
DoDAF规范、模型与实例 5-23[北京]
信息架构建模(基于UML+EA)5-29[北京]