LINUX平台高级调试和优化
关于LINUX的资料浩如烟海,学习LINUX的途径也有很多,如何才能在比较短的时间里获得一个比较大的提升呢?《软件调试高级研习班2024北京站》将与各位LINUX爱好者共同探索这个问题的最佳答案。本着生动有趣、理论与实践密切结合的原则,本研习班独辟蹊径,采用封闭训练方式打造独有的沉浸式学习体验;使用调试之剑披荆斩棘,带你畅游纷繁复杂的LINUX世界;以格物精神,钻研代码,深挖LINUX系统的核心机制,这一讲求得一理,下一讲再求得一理,步步推进。
整个研习班,旨在实现三大目标:
- 深入理解LINUX操作系统的基础设施和核心机制;
- 学习开发LINUX程序(内核模块和应用程序)的工具和方法;
- 学习LINUX平台上的调试工具和调试典型问题的方法。
本研习班由《软件调试》和《格蠹汇编》的作者张银奎主讲。
时间
线下2天:10月26日 - 10月27日
线上10小时:11月9日
地点
北京
课程形式
- 讲解
- 真实案例演示
- 动手实验
培训对象
在Linux平台上从事开发或测试的软件工程师和技术带头人
主办单位
- 格蠹信息科技(上海)有限公司
- 高端调试网站
日程梗概
课程大纲
一、LINUX大局观(1小时)
要点:GNU、发行版、三位一体、推动Linux发展的两股力量、内核源代码树、两大空间的关键部件、系统调用、strace、vdso、GNU、glibc、内核参数、观察当前内核使用的编译选项、内核文档。
二、使用挥码枪和NanoCode调试LINUX内核(1.5小时)
要点:内核调试的挑战、CoreSight技术基础、挥码枪的基本用法、加载符号、观察内核模块、设置断点、调用栈、观察进程和线程、常用的内核调试命令。
实战1:使用硬件调试器驾驭LINUX内核
要点:使用挥码枪硬件调试器调试GDK8系统、将狂野的LINUX内核中断下来、仔细把玩。
三、GDB精要(1小时)
要点:为自由而生、Richard Stallman传奇、GDB诞生记、GDB版本、GDB的架构和工作原理、ptrace、命令类型、命令语法、常用命令、调试符号、DWARF、符号文件、下载Ubuntu的符号包和源代码、ELF结构、readelf、寻找符号的方法、栈回溯(bt)、软件断点、硬件断点、复杂的断点命令、控制线程。
四、应用程序崩溃和转储(1小时)
要点:信号概要、信号屏蔽、设置信号处理器、理解古老的异常处理方式、setjmp、longjmp、段错误、段错误实例介绍、core文件、ulimit、core_pattern、ubuntu的错误收集机制、aport、分析core文件、本地分析、跨机器分析、分析core文件的最佳实践。
实战2:使用GDB调试后台服务因段错误崩溃
要点:Linux下重要后台服务(Daemon)随机崩溃、深挖到底、竟然与C语言的规范有关、让你深刻认识C与C++的一个大不同之处、感受著名的头文件陷阱。
熟悉如下工具和主要技能:GDB、GCC、map、dmesg、调试Linux应用程序、反汇编、插入代码JIT调试。
温习如下知识点:虚拟内存、分页机制、页表、缺页异常、段错误、空指针、AT&T汇编和Intel汇编、调用规约。
五、内存管理(上)(1.5小时)
要点:物理内存、从core到DRAM、NUMA、page、pfn、页表管理、TLB、MMU、页错误、观察页错误、虚拟内存、交换分区、匿名交换和非匿名交换、进程的地址空间、vma、maps、vmstat、活跃内存和非活跃内存、内核池、从/proc/meminfo 观察内存使用情况、meminfo 信息深入分析。
实战3:与内存管理器对话
要点:编写和修改内核驱动(LKM)、加载驱动、使用多种方式分配内存、并通过不同方式观察内存开销变化、理解内存分配的原理、关键术语、学习各种观察工具的用法。
六、内存管理(下) (1.5小时)
要点:用户态堆、ptmalloc、arena、heap、主arena的布局、辅anrena的创建、堆块结构、分配策略、bin、bin的组织、分配过程、释放过程、堆有关的错误、故障调试、valgrind、valgind的工作原理、Address Sanitizer(ASan)、ASan的工作原理、影子记录、检查过程、额外开销。
实战4:使用valgrind调试典型的堆错误
要点:堆很脆弱、经不起的考验有很多(溢出、多次释放、野指针等)、在Linux解决这些问题的最有力武器就是valgrind、以老雷亲自编写的GeMalloc程序为样本、模拟各类堆错误、并使用valgrind一一捕获。
七、文件系统 (1.5小时)
要点:“一切皆文件”、文件系统架构、组成、文件操作、设备文件系统、使用内核调试器帮助理解文件系统、EXT FS、Reiser FS、四个核心对象、准文件系统、proc fs(原理、关键代码、重要的应用、meminfo、maps等)、sysfs、debug fs。
实战5:使用LINUX双机内核调试探究句柄混论之谜
要点:应用程序与驱动程序通信时、驱动程序总是收到错误的数据、打印出来观察、竟然是日志信息送给了驱动、使用KGDB分析应用层程序与驱动程序间通信的过程、分析数据混乱原因、理解虚拟文件系统、Linux驱动程序、sysfs、标准文件等理论化。
八、任务管理(1.5小时)
要点:进程和线程、LWP、任务结构体、一体二用、进程属性、线程结构体、内核态栈、寻找内核态栈的方法、内核态栈溢出、调度队列、观察队列长度、线程优先级、线程调度器、计算每个任务时间片的方法、选择当前运行任务的算法、strace、ps命令的高级用法、pstree、top、使用kernelshark观察线程调度过程。
九、内核模块和驱动开发(1.5小时)
要点:可加载内核模块(LKM)、init和exit、三类设备、字符设备、块设备、网络设备、 softirq和tasklets、pnp、udevinfo、系统调用、与应用通信、ioctl, 文件读写、典型设备驱动解析eMMC、SD、USB(控制器、HUB、设备、数据传输)。
十、内核消息 (1小时)
要点:内核调试设施、printk、vprintk_emit、消息级别、消息头结构、结构化信息输出、facility、logger、syslog、console、syslogd、/dev/kmsg、隐含锁、动态控制消息输出、结构化的消息、结构化消息在PnP中的应用。
十一、系统崩溃(1小时)
要点:OOPS和Panic、Panic的信息格式、Die、ARCH下的实现代码、最常见的Panic、详细解读Oops信息。
实战6:分析系统Panic的原因
要点:通过LKM触发内核Oops和Panic(内核态栈溢出、段错误和NMI watch dog超时)、理解Oops输出、分析内核Panic工程、解析其来龙去脉。
十二、调优和事件追踪(ftrace和perf)(1.5小时)
要点:测试性能的两种基本方法、Sampling、Instrumentation、trace机制背景、ftrace简史、ftrace的工作原理、追踪点、文件系统接口、user marker、启用追踪、读取trace数据、Kernshark、观察线程被抢时间片、观察中断处理过程、perf、perf的典型用法、选择CPU的计数器、perf使用示例(统计page fault来源)。
讲师介绍
往届研习班部分照片
报名或垂询
标准收费
5200元 / 每人
包括:
- 基于ARM CoreSight技术的挥码枪硬件调试器一套(挥码枪官网:https://www.nanocode.cn/#/ntp/)
- 包含ARMv8 SoC和Ubuntu系统的GDK8开发套件一套
- 纸质版讲义
- 研习班期间的午餐和茶点
课程顾问
Lisa
邮箱:lisa.long@nanocode.cn
微信:13801874134
Gary
邮箱:jiali.liu@nanocode.cn
微信:17600723325
公司付款信息
账户名称:格蠹信息科技(上海)有限公司
开户行:招商银行股份有限公司上海浦江镇支行
账号:1219 3085 8010 501