4006-998-758
3000+课程任你选择
C++高级编程与调试(Windows平台)
研发学院 软件架构师 系统调试专家 开课时间:2021-07-30
张银奎

1996年毕业于上海交通大学信息与控制工程系,在软件产业工作20年,拥有13年Intel工作经历,任职于INTEL公司的上海研发中心,先后在PASD、DEG、CPG、PCCG、VPG等部门工作。在英特尔先后从事软件开发、系统测试、架构设计等工作,呈担任英特尔架构事业部视觉与并行计算事业群担任首席软件架构师职务。

对IA-32架构、操作系统内核、驱动程序、设计模式、软件调优、C和C++等有深厚的工作经验,对于精炼、易于维护的代码有不懈追求。10多年GPU、CPG等深度优化技术积累和代码重构经验,每天的主要工作除了设计和编写代码外,就是调试和重构C语言代码。


查看老师详情
课程内容

课程对象


使用C++语言开发Windows应用软件的软件工程师,或者相关项目的测试工程师、项目带头人和技术经理


课程形式


演讲 + 演示及动手实验


课程大纲


第一部分:Windows系统精要(1小时)

概述Windows操作系统的架构、系统组件(HAL、内核、执行体、Native进程和子系统)、重要的系统机制(内核服务调用、中断管理、内核对象等)以及主要数据结构(进程、线程、内核对象、设备对象等),并介绍进程、线程、操作系统的用户和内核空间等重要概念

 

第二部分:Visual Studio IDE的调试和优化支持(1.5小时)

编译过程,编译器检查,静态检查工具,运行期检查,栈指针被破坏(Stack pointer corruption.),局部缓冲区(数组)越界(Overruns),栈被破坏(Stack corruption.),依赖未初始化过的局部变量,因为赋值给较短的变量导致数据丢失;调试版本的运行时,运行期检查的工作原理,性能探测器,分析CPU使用率,分析内存使用率,使用性能向导定制分析过程

 

第三部分:WinDBG精要(1小时)

系统介绍 WinDBG的命令类型、基本使用方法、定制调试事件的方法和重要的调试命令,包括用户态调试和内核态调试的常用命令

 

第四部分:异常处理和应用程序崩溃(1.5小时)

结构化异常处理(SEH),C++异常处理,Windows的异常奋发机制,程序崩溃的完整过程和调试方法,转储的基本知识,如何使用ADPLUS自动产生用户态转储,以及分析用户态转储的常用命令和技巧

 [试验一] WinDBG基础(15分钟)

[试验二] JIT调试和异常事件处理(30分钟)

 

第五部分:C++对象模型(1.5小时)

解析和观察方法表,虚函数的工作原理,对象的构造和析构,对象引用,对象作为函数参数,隐式创建临时对象,继承,接口

 

第六部分:深入理解栈 (1 hours)

详细介绍栈的自动增长机制,栈帧的组织方法,并通过实例演示栈溢出攻击的原理,通过Windows 7系统的真实案例介绍基于Cookie的溢出检测机制

 [试验三] 理解栈和栈溢出(30分钟)

 

第七部分:多线程调试和优化(1小时)

C++程序中创建线程的多种方法,在VC和WinDBG中观察和操纵线程的方法,使用WinDBG来调试多线程程序和同时调试多个进程,包括控制线程执行状态、观察同步对象、分析死锁等;会穿插介绍多核和多处理器系统中的各种同步机制

 

第八部分:堆(1.5小时)

C++程序中动态分配内存的多种方法(malloc, new, HeapAlloc),介绍调试内存有关的典型问题的方法和技巧,包括使用CRT堆和Win32堆的调试支持,分析内存泄漏、访问违例和栈溢出等,在探讨实践经验的同时会穿插重要的理论知识,包括Win32对和CRT堆的结构、内存管理常识、堆布局等,真实案例分析

 [试验四] 使用UMDH定位内存泄漏(30分钟)

 

第九部分:转储文件分析(1.5小时)

转储文件简介,产生转储文件的多种方法,AdPlus,崩溃模式和挂死模式,断点触发,分析转储文件的常用命令,最佳实践,真实案例解析

 

第十部分:事件追踪和调优 (1小时)

简要介绍ETW (Event Tracing for Windows) 机制的原理和在Windows系统中的重要地位,演示如何使用Windows Performance Toolkit (WPT) 来发现应用程序的热点和瓶颈,涵盖常用的有关工具,包括xperf, xbootmgr, xperfview等

 

第十一部分: 使用vTune调优(1.5小时)

要点:vTune背景,版本历史,关键组件,收集数据的方法,基本热点(Hotspot)分析,高级热点分析,符号文件和符号文件设置,自定义分析模板,观察线程切换细节(上下文切换和preempt),观察中断,手工设置Marker,案例分析

 

 

 

 

 

 

 

 

 

 

 

 

 

 


返回上一级