GDB单步跟踪
1 | gdb + 可执行二进制程序 |
常用参数
参数 | 解析 |
---|---|
-e | 指定可执行文件名 |
-c | 指定coredump文件 |
-d | 指定目录加入到源文件搜索路径 |
–cd | 指定目录作为路径运行gdb |
-s | 指定文件读取符号表 |
-p | 指定attach进程 |
调试进程
1 | gdb -p 进程名 |
调试线程
1 | info thread //列出已允许的进程下的线程 |
查看相关信息
1 | (gdb) info thread //列出线程 |
指定程序允许参数
1 | set args 1 2 3 4 |
其他参数
1 | path 设定程序的允许路径 |
添加断点
1 | break function 进入指定函数时停住 |
删除断点
1 | delte n 删除n号断点 |
程序调试
1 | run/r 程序执行直到遇到断点 |
输出
1 | (gdb) print num |
源代码显示
1 | 命令 解析 |
查看内存地址保存的值
1 | 你可以使用examine命令(简写是x)来查看内存地址中的值。x命令的语法如下所示: |
查看寄存器
1 | info registers |
显示堆栈
1 | (gdb) backtrace [-full] [n] |
显示栈帧
1 | frame 或 f 会打印出这些信息:栈的层编号,当前的函数名,函数参数值,函数所在文件及行号,函数执行到的语句。 |
搜索源代码
1 | forward-search |
设置观察点
1 | watch 为表达式(变量)expr设置一个观察点。一旦表达式值有变化时,马上停住程序 |
设置捕捉点
1 | 可设置捕捉点来补捉程序运行时的一些事件。如载入共享库(动态链接库)或是C++的异常。设置捕捉点的格式为: |
强制调用函数
1 | (gdb) call <expr> |
终止
1 | kill 终止正在调试的程序 |
打印美化
1 | set print pretty on |