Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

常用命令

调试命令(缩写) 作用
break (b) xxx 在源代码指定的某一行设置断点,其中xxx用于指定具体打断点位置。
run (r) 执行被调试的程序,其会自动在第一个断点处暂停执行。
continue (c) 当程序在某一断点处停止后,用该指令可以继续执行,直至遇到断点或者程序结束。
next (n) 令程序一行代码一行代码的执行。
step (s) 如果有调用函数,进入调用的函数内部;否则,和 next 命令的功能一样。
until (u) 在一个循环体内单步跟踪时,单纯使用 until 命令,可以运行程序直到退出循环体。
until (u) n n 为某一行代码的行号,该命令会使程序运行至第 n 行代码处停止。
print (p) 打印指定变量的值,其中 xxx 指的就是某一变量名。
list (l) 显示源程序代码的内容,包括各行代码所在的行号。
finish (f) 结束当前正在执行的函数,并在跳出函数后暂停程序的执行。
return (return) 结束当前调用函数并返回指定值,到上一层函数调用处停止程序执行。
jump (j) 使程序从当前要执行的代码处,直接跳转到指定位置处继续执行后续的代码。
quit (q) 终止调试。
回车 执行上一条指令

调试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# 进程编译
gcc -g -O0 {program.c} -o {program} # -g: 待调试信息编译 -O0: -O表示优化编译,优化级别:0(不优化)
readelf -S {program} | grep debug # 检查进程是否带调试信息
objdump -g {program} # 检查进程是否带调试信息

# 查看core文件
file core.23118
gdb lte_trps core.23118
bt
f 4

# 附加进程
gdb attach `pidof lte_trps`
gdb -p `pidof lte_trps`

# 拉起进程
ROOT="/LTE"
export LD_LIBRARY_PATH=$ROOT/user/Area0/bin:$ROOT/user/Area0/lib:/opt/lte/tools/usr/lib/:$LD_LIBRARY_PATH
gdb ./lte_trps
run 10.11.1.130:10157 10.11.1.130:15003
gdb --args lte_trps 10.11.1.130:10157 10.11.1.130:15003
run

# 断点管理
break {funcname} # 在 funcname 函数设断点
break {file}:linenum # 在 file 第 linenum 行设断点
break *0x4005a0 # 在内存地址设断点
info breakpoints # 查看所有断点
delete {ID} # 删除断点

# 执行控制
continue (c) # 继续运行到下一个断点
next (n) # 执行下一行(不进入函数)
step (s) # 执行下一行(进入函数)
finish (f) # 执行完当前函数并暂停

# 查看变量、内存、堆栈、寄存器
info locals # 显示当前函数(当前堆栈帧)中所有局部变量的值
print {var} # 显示变量值(十进制)
print /x {var} # 十六进制显示
print *(int*){0xaddr} # 强制转换内存地址内容

x /4x &{var} # 以十六进制显示 4 个字节
x /s {0xaddr} # 显示字符串(直到 NULL)
x /10i $pc # 显示当前 10 条汇编指令

backtrace (bt) # 显示调用栈
frame {ID} # 切换到指定堆栈帧

info registers # 显示所有寄存器
print $rax # 显示 RAX 寄存器的值

# 多线程调试
info threads # 查看所有线程
thread {ID} # 切换到指定线程

# 观察捕获
watch {var} # 变量被修改时暂停
watch *(int*){0xaddr} # 监视内存地址
catch throw # 捕获 C++ 异常

# 其他命令
set {var} = 10 # 修改变量为 10
set print pretty on # 美化结构体输出
quit (q) # 退出调试
help {command} # 查看命令帮助

评论