笔记本: linux 调试
创建时间: 2020/4/25 13:09 更新时间: 2020/4/28 10:15
作者: _零号_
URL: https://blog.csdn.net/yasi_xi/article/details/18399731#
linux gdb调试命令
gdb调试目前了解到主要分为下面几个部分:
1. 基本调试手段(断点,观察点,单步调试指令)
2. 打印显示信息相关(格式化输出等)
3. 内存处理(栈数据相关)
4. 调试core文件
5. 多线程调试
查看线程版本:
gdb -v
7.0以前:多线程调试时,调试一个线程,所有线程都停止
7.0以后:支持线程non-stop模式,即调试一个线程时,其它线程继续执行
1 基本调试手段
对正在运行的程序进行gdb调试
gdb -p pid(进程pid)
注:进入调试后,不需要用'r'指令,因为程序已经运行了。可以像正常调试那样设置断点,打印信息等。
例子:
policy进程pid=205706
所以调试policy进程的命令为:gdb -p 205706
然后进入调试界面
断点相关:
b n:在指定行号设置断点
b function
b *0x400522:在地址处设置断点
b *main:在main函数的prolog代码处设置断点(prolog、epilog,分别表示编译器在每个函数的开头和结尾自行插入的代码)
b test.c:5 在test.c文件的第5行设置代码
b Foo:foo 命名空间设置断点
b 10 if i==101 :条件断点,当i==101时才会进入断点
tb a.c:15 :临时断点,使用一次就失效
ignore 1 5 :忽略接下来5次编号为1的断点的暂停
info b(breakpoints):查看所有断点信息
d :删除所有断点
d 1:删除编号为1的断点
d 1 3:删除编号为1-3的断点
启动指令:
r -c file:指定配置文件执行进程
r:重新运行进程,会以第一次启动时的参数为配置文件运行
c (continue):继续往下运行程序,知道遇到下一个断点
单步调试相关指令:
s:向下执行一行源代码,如果这行代码包含函数则进入函数如果是库函数也就是不带调试信息的函数,即使s指令也不会进入
fin(finish):退出函数
return 40:退出函数并以40为返回值(剩下的部分不会被执行)
call func():直接调用函数,跟print指令一样
until:退出循环
set ver n=value:设置变量n的值为value
观察点相关指令:
bt :打印所有调用栈
bt full:打印所有调用栈并输出所有局部变量
评论0