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
9.4.18 跟踪多线程程序
多线程调试的问题,前面已经提到过,对go程序而言,我们关注的是:
区分go中哪些线程可以trace、哪些不可以trace
可以trace的多个线程,如何自动trace
GPM模型中,如果因为ptrace挂起了一个线程,GPM会不会创建新的M
。。。
TODO 任务优先级:高
results matching "
"
No results matching "
"