1 介绍
2 前言
3 常用术语
4 调试基础
4.1 调试目的
4.2 调试依赖
4.3 反调试技术
5 走进调试器开发
5.1 调试器概貌
5.2 调试器示例
6 开发go指令级调试器
6.1 进程启动
6.2 进程attach
6.3 启动&attach
6.4 调试会话
6.5 反汇编
6.6 添加断点
6.7 列出断点
6.8 移除断点
6.9 清空断点
6.10 步进操作
6.11 运行到断点
6.12 打印内存数据
6.13 打印寄存器数据
6.20 跟踪多线程程序
6.21 重构程序
6.x More...
7 挺进符号级调试器
7.1 理解ELF文件
7.2 符号&符号表
7.3 符号的解析
7.4 重定位
7.5 加载
7.6 go标准库debug/*
7.6.1 debug/elf
7.6.2 debug/gosym
7.6.3 debug/dwarf
7.7 挺进DWARF
8 调试信息标准: DWARF
8.1 发展历史
8.2 DWARF结构
8.3 调试信息条目:DIE
8.3.1 DIE介绍
8.3.2 DIE描述数据和类型
8.3.3 DIE描述可执行代码
8.3.4 DIE数据编码
8.4 其他调试数据
8.4.0 加速访问
8.4.1 行号表信息
8.4.2 宏信息
8.4.3 调用栈帧信息
8.4.4 变长数据
8.4.5 压缩DWARF数据
8.4.6 ELF Sections
8.5 DWARF总结
8.6 解析DWARF
8.7 使用DWARF
8.8 本章总结
9 开发go符号级调试器
9.1. 需求分析
9.2 概要设计
9.2.1 整体架构
9.2.2 前端UI层设计
9.2.3 Service层设计
9.2.4 后端符号层设计
9.2.5 后端目标层设计
9.3 详细设计
9.4 编码实现
9.4.1 进程启动
9.4.2 进程attach
9.4.3 进程启动并attach
9.4.4 调试会话
9.4.5 反汇编
9.4.6 添加断点
9.4.7 查询断点
9.4.8 移除断点
9.4.9 清空断点
9.4.10 步进执行
9.4.11 继续执行
9.4.12 查看内存
9.4.13 查看寄存器
9.4.14 调用栈帧信息
9.4.15 变量&类型系统
9.4.16 函数
9.4.17 协程
9.4.18 跟踪多线程程序
9.4.19 More...
10 致谢
11 附录
11.1 go程序启动流程
Published with GitBook
4 调试基础
调试器基础
先简要介绍下调试器相关的基础知识,包括:
目的
, 我们为什么需要一个调试器?
支持
, 支持调试操作需要哪些能力的支持?
安全
, 调试会带来哪些安全风险,又该如何防范?
results matching "
"
No results matching "
"