安装 pstack
RedHat
公司发行的Linux
操作系统(RHEL
,CentOS
等等)也提供了pstack
工具,只要安装gdb
:
# yum install gdb
gdb 经典文档
- github 地址,https://github.com/hellogcc/100-gdb-tips/blob/master/src/index.md
- 显示gdb版本信息
- 显示gdb版权相关信息
- 启动时不显示提示信息
- 退出时不显示提示信息
-
函数
- 是否进入带调试信息的函数
- 进入不带调试信息的函数
- 退出正在调试的函数
- 直接执行函数
- 打印函数堆栈帧信息
- 打印尾调用堆栈帧信息
- 选择函数堆栈帧
-
断点
- 在程序地址上打断点
- 在程序入口处打断点
- 在文件行号上打断点
- 保存已经设置的断点
- 设置临时断点
- 设置条件断点
-
观察点
- 设置观察点只针对特定线程生效
- 设置读观察点
-
Catchpoint
- 为fork调用设置catchpoint
- 为vfork调用设置catchpoint
- 为exec调用设置catchpoint
- 为系统调用设置catchpoint
通过为ptrace调用设置catchpoint破解anti-debugging的程序
打印
- 打印STL容器中的内容
- 打印大数组中的内容
- 打印数组中任意连续元素值
- 打印数组的索引下标
- 格式化打印数组
- 打印函数局部变量的值
- 打印进程内存信息
- 打印静态变量的值
- 打印变量的类型和所在文件
- 打印内存的值
- 打印源代码行
- 每行打印一个结构体成员
- 按照派生类型打印对象
- 指定程序的输入输出设备
- 使用“$_”和“$__”变量
- 打印程序动态分配内存的信息
-
多进程/线程
- 调试子进程
- 同时调试父进程和子进程
- 查看线程信息
- 打印所有线程的堆栈信息
- 在Solaris上使用maintenance命令查看线程信息
- 不显示线程启动和退出信息
- 只允许一个线程运行
- 使用“$_thread”变量
- 一个gdb会话中同时调试多个程序
- 打印程序进程空间信息
-
core dump文件
-
汇编
- 在函数的第一条汇编指令打断点
- 自动反汇编后面要执行的代码
- 将源程序和汇编指令映射起来
- 显示将要执行的汇编指令
- 打印寄存器的值
-
改变程序的执行
- 设置变量的值
- 修改PC寄存器的值
- 跳转到指定位置执行
- 使用断点命令改变程序的执行
-
信号
- 信号发生时是否暂停程序
- 信号发生时是否打印信号信息
- 信号发生时是否把信号丢给程序处理
- 给程序发送信号
-
共享库
-
脚本
- 按何种方式解析脚本文件
-
源文件
-
图形化界面
- 显示汇编代码窗口
- 显示寄存器窗口
-
其它
- 支持预处理器宏信息
- 保留未使用的类型
- 使用命令的缩写形式
- 在gdb中执行shell命令和make
- 在gdb中执行cd和pwd命令
- 设置命令提示符
- 设置被调试程序的参数
- 设置被调试程序的环境变量
- 得到命令的帮助信息
- 记录执行gdb的过程