GDB调试:
在linux环境中,GDB是主要的调试工具,用来调试C/C++程序。
如果要调试程序,需要在gcc编译时加上-g
参数,比如gcc -g -o test test.c
进入gdb调试:gdb test
退出gdb调试:quit
gdb常用命令:
命令 | 简写 | 功能 |
---|---|---|
run | 无 | 开始运行程序(如果没有断点,会直接运行完) |
list | l | 查看源代码 |
break | b | 设置断点 |
continue | c | 继续运行,执行程序到下一个断点 |
next | n | 执行下一行代码 |
step | s | 单步执行,可以进入到函数中 |
finish | 无 | 运行到当前函数结束 |
p | 打印变量的值 | |
until | u | 执行到指定行 |
delete | d | 删除断点 |
info breakpoints | 无 | 显示断点信息 |
info | i | 显示信息 |
backtrace | bt、where | 打印函数栈信息 |
info locals | 无 | 打印断点所在函数的所有局部变量的值 |
查询用法: help command
,比如help next
,就可以看到next的命令帮助。
list:
list 行号,显示某一行附近的代码
list 函数,显示某个函数附近的代码
list 文件名:函数,显示某文件的某个函数附近的代码
break:
(断点处未被执行)
break 行号,将断点设置到该行
break 函数,将断点设置到该函数的开始处
break 文件名:函数,将断点设置到某文件的某个函数处
info breakpoints:
显示断点信息
Num:代表断点的编号
Type:代表是断点
Disp:代表该断点被执行后,应该keep(保留),del(删除),dis(关闭)
Enb:代表该断点是启用(y)还是未启用(n)
Address:代表该断点的虚拟内存地址
What:代表该断点在源文件的信息
delete:
delete num,删除指定断点,输入的Num不是行号,而是断点的编号,编号由info breakpoints
获得。
delete,删除所有断点
disable:
disable num,关闭指定断点,编号由info breakpoints
获得
disable,关闭所有断点
enable:
enable num,启用指定断点
enable,启用所有断点
enable once num,断点执行一次后关闭
enable delete num,断点执行一次后删除
next:
next n,执行n步(不会进入函数中)
step:
step n,执行n步(会进到函数中)