求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
 
 
 
开班计划 | 技术学院 | 管理学院 | 嵌入式学院 | 机械 | 军工学院 | 定向培养 | 专家指导  
 电话 English
成功案例   品质保证
 
   
成功案例
英特尔 SCRUM-敏捷开
东方证券 基于看板的敏捷方法
亚信 工作量估算
法国电信 基于iproces
赛孚耐 基于Scrum的敏
英国帕吉 基于MyProce
中海油 软件开发过程

相关课程  
统一过程及应用
敏捷过程实践
基于XP/RUP的迭代开发
软件开发过程指南
SCRUM过程实践
敏捷测试-简单而可行
 

全部课程 >开发技能  
软件调试案例精华集锦 
2575 次浏览  55 次
张银奎
《软件调试》和《格蠹汇编——软件调试案例集锦》的作者
 
时间地点: 北京、上海、深圳根据报名开班
课程费用:5000元/人
企业内训:可以根据企业需求,定制内训,详见 内训学习手册


认证方式:
培训前了解能力模型。
培训后进行能力评测:
  • 在线考试
  • 能力分析,给出学习建议
  • 合格者颁发证书,作为职业技能资格证明


     本培训通过一系列有代表性的真实案例介绍解决复杂软件问题的调试技巧和有关的软硬件知识。所选案例既有深度,又有较大的广度,从运行模式看有内核态和用户态,从问题的类型来看,有多种原因导致的崩溃和挂死,也有数据混乱,启动、睡眠或者唤醒失败等,从编程语言角度看有C/C++和.Net。本培训专门针对已经有一定调试经验的软件工程师而设计,目标是引领他们将技术水平提升到一个新层次。

    培训目标:

    • 案例:混合调试之右键菜单异常缓慢
    • 实验:转储分析之寻找右键菜单缓慢原因
    • 案例:堆损毁导致的随机崩溃
    • 案例:转储分析之应用程序随机崩溃
    • 案例:随机崩溃之无效句柄
    • 案例:应用程序挂死之陷在内核态
    • 实验:拯救挂死的PowerPoint
    • 案例:.Net程序调试之SDK安装程序死循环
    • 案例:转储分析之双重错误
    • 实验:分析内核态栈溢出导致的系统崩溃转储
    • 案例:文件数据意外混乱
    • 案例:后台服务因段错误崩溃

    培训对象:软件开发工程师
    学员基础:具有一定开发经验,最好有一定调试基础
    授课方式: 真实案例解析 + 关联知识讲解 + 动手实验

    培训内容:2天

    1.5天Windows案例(用户态(本地代码和.Net)为主,1个内核态案例作为扩展性学习),0.5天Linux案例

    以下为Windows案例
    案例:混合调试之右键菜单异常缓慢(90分钟)   现场定位Windows资源管理器中右键菜单异常缓慢的原因,介绍如下知识和调试技巧:“本地程序中的托管来客”;混合代码情况下的未处理异常;栈溢出;浮点计算单元和浮点寄存器;浮点异常的延迟性;上下文扩展模块的注册方法;如何调试性能有关的问题。
    实验:转储分析之寻找右键菜单缓慢原因(30分钟)
    案例:堆损毁导致的随机崩溃(60分钟)   以一个典型的因为字符串类使用不当而导致的堆错误为例,深刻理解进程中的多个CRT堆,堆管理器的脆弱之处,字符串类分配内存的方法,静态链接和动态链接可能产生的影响;分享使用堆的最佳实践。
    案例:转储分析之应用程序随机崩溃(60分钟)   以某真实商业软件的低概率崩溃留下的转储文件为例,介绍应对应用程序崩溃的常用调试方法和有关的知识和调试技巧:JIT调试,WER和崩溃转储,没有源代码的情况下定位崩溃点和崩溃原因。
    案例:随机崩溃之无效句柄(90分钟)   解析一个因句柄使用不当而导致的应用程序崩溃问题,介绍如何从没有源代码的系统函数入手寻找线索。并介绍Windows系统中关于句柄的调试机制和用法。
    案例:应用程序挂死之陷在内核态(90分钟)   以Office程序普遍存在的DDE问题为例,介绍如何结合用户态调试与内核态调试两种手段发现负责软件问题的根本原因;并介绍如何在没有源代码和私有符号的情况下分析函数的参数和理解程序的执行内幕。
    实验:拯救挂死的PowerPoint(30分钟)
    案例:.Net程序调试之SDK安装程序死循环(90分钟)   分析真实案例——Windows 7 Platform SDK安装程序因为异常处理不当而意外陷入死寻坏,熟悉如下调试工具和技巧:使用WinDBG + SOS扩展分析.Net程序的转储文件;使用ildasm反汇编.Net程序,理解基本的中间代码;理解异常处理机制;思考异常处理机制的深层风险——引入不确定的程序出口。
    案例:转储分析之双重错误(90分钟)   分析因为双重错误(Double Fault)而导致的Windows系统崩溃,理解如下知识点:操作系统的任务切换机制;CPU的硬件任务切换;内核态栈溢出;任务状态段TSS,内核态栈溢出; CR2寄存器;CR3寄存器。
    实验:分析内核态栈溢出导致的系统崩溃转储(30分钟)
    以下为Linux案例
    案例:文件数据意外混乱(90分钟)   :分析因为标准文件句柄误用而导致的后台服务进程与驱动程序之间的通信数据混乱案例,介绍如下知识点和调试方法:Daemon,Linux Driver,使用虚拟文件系统与用户态模块通信,标准文件,kprint, dmesg。
    案例:后台服务因段错误崩溃(90分钟)   现场演示和分析Linux后台服务意外崩溃的原因,介绍调试Linux下应用程序崩溃的三种常用方法:GDB、dmesg + map文件、插入代码JIT调试。本案例介绍的知识点有:段错误的内在原因,信号和信号处理器,函数调用协议,C标准中关于无原型函数的处理方式,空指针,使用GDB分析栈的常用命令。
    实验:定位导致段错误的原因(30分钟)
     
    2575 次浏览  55 次
    其他人还看了课程
    通用软件开发过程指南(一个项目实例)  6387 次浏览
    代码整洁之道-态度、技艺与习惯  6882 次浏览
    基于复用的软件开发  2018 次浏览
    代码质量标准与评审方法  6225 次浏览
    Python高级编程之高性能与异步IO(AsyncIO)  2230 次浏览
    如何编写高质量代码  6271 次浏览
    定制内训


    课程计划
    QT应用开发 11-21[线上]
    C++高级编程 11-27[北京]
    LLM大模型应用与项目构建 12-26[特惠]
    UML和EA进行系统分析设计 12-20[线上]
    数据建模方法与工具 12-3[北京]
    SysML建模专家 1-16[北京]