GDB调试教程
Step 1 生成包含调试信息的源文件
g++ Demo.cpp -o Demo_gdb -L ./shareLibrary/ -lTools -g
注意:需要加-g
参数
Step 2 启动调试
gdb Demo_gdb
Step 3 设置参数信息
程序运行时,设置参数的方式
./Demo_gdb /path/log 8888
调试时,设置参数的方式
set args /path/log 8888
Step 4 gdb调试常用命令
-
查看代码
list 或 l //默认查看10行 set listsize rows //可以指定要查看的行数 list num //查看第num行
-
添加、取消、查看断点
//1 设置断点 break 20 //或者 b 20 //2 查看端点 info b //查看结果 Num Type Disp Enb Address What 1 breakpoint keep y 0x0000000000401051 in main() at Demo.cpp:10 2 breakpoint keep y 0x0000000000401084 in main() at Demo.cpp:20 3 breakpoint keep n 0x0000000000401137 in main() at Demo.cpp:30 //3 禁用断点 disable b Num //4 删除断点 delete breakpoints Num
-
运行
run 或 r
-
下一步
next 或 n //不会进入函数内部,相当于F10
-
下一步
step 或 s //进入函数内部,相当于F11
-
显示变量
print 或 p //只显示一次,它还可以执行变量表达式 display args //长显 //当前设置长显得变量 (gdb) info display Auto-display expressions now in effect: Num Enb Expression 2: y order 3: y a 4: y b delete display Num //取消长显
-
继续执行
continue 或 c
-
手工设置变量得值
set var order = 1;
扩展(段错误)
首先,查看一下,当前用户有没有设置生成报错文件Core
ulimit -a
test@test:~/vscodeProject/src$ ulimit -a
core file size (blocks, -c) 0 //用于生成报错文件
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 15587
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65536
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 15587
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
然后设置无限制
test@test:~/vscodeProject/src$ ulimit -c unlimited
test@test:~/vscodeProject/src$ ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 15587
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65536
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 15587
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
然后使用gdb调试
gdb Demo_gdb core.8227
可以调用函数栈
bt