您的位置:首页 > 其它

GDB学习笔记(一)--常用命令

2017-04-30 21:21 375 查看

GDB学习笔记(一)–常用命令

启动gdb

gdb test                  // 使用gdb调试test程序


运行

run                       // 开始运行。
run arg1 arg2 arg3 ...    // 开始运行,并传入命令行参数。

run 可简写为 r。


查看代码

list                      // 显示10行代码。
list line                 // 显示第line行附近的10行代码。
list n,m                  // 显示第n行至第m行之间的代码。
list ,n                   // 显示第n行及其前面的10行代码。
list fun                  // 显示fun()函数附近的10行代码。
list file:fun             // 显示file文件中fun()函数附近的10行代码。

list 可简写为 l。


断点

break n                   // 在第n行设置断点。
break fun                 // 在fun()函数处设置断点。
break file:n              // 在file文件中第n行设置断点。
break file:fun            // 在file文件中fun()函数处设置断点。
break if condition        // 当condition条件成立时,停止程序。
info break(i b)           // 查看断点。
watch expr                // 监视expr的值,expr可以是变量,也可以是表达式。若expr发生改变,停止程序。
delete n                  // 删除编号为n的断点。

break 可简写为 b。
delete 可简写为 d。


单步调试

continue                  // 运行至下一个断点。
step                      // 单步跟踪,进入函数。
next                      // 单步跟踪,不进入函数。
finish                    // 运行程序,直到当前函数完成返回。
打印函数返回时的堆栈地址,返回值以及参数值(finish不可用于main())。
until                     // 运行程序,直到退出循环体。

continue 可简写为 c。
step 可简写为 s。
next 可简写为 n。


数据的值

ptype x                   // 查看变量x的类型
print expr                // 查看expr的值,expr可以是变量,也可以是表达式。
print expr=x              // 修改expr的值,expr可以是变量,也可以是表达式。
print arrname             // 查看数组中的所有元素的值
例如:int arr[] = {1,3,5,7,9};
(gdb) print arr
$1 = {1, 3, 5, 7, 9}
print arrname@len         // 查看len个数组的值(越界访问)
例如:int arr[] = {1,3,5,7,9};
(gdb) print arr@2
$2 = {{1, 3, 5, 7, 9}, {32767, 0, 1, 0, 0}}
print *arrname            // 查看数组首元素的值
例如:int arr[] = {1,3,5,7,9};
(gdb) print *arr
$3 = 1
print *arrname@len        // 查看数组前len个元素的值
例如:int arr[] = {1,3,5,7,9};
(gdb) print *arr@2
$4 = {1, 3}
print &arrname            // 查看数组的地址
例如:int arr[] = {1,3,5,7,9};
(gdb) print &arr
$5 = (int (*)[5]) 0x7fffffffe4c0
print &arrname[i]         // 查看数组元素arrname[i]的地址
例如:int arr[] = {1,3,5,7,9};
(gdb) print &arr[0]
$6 = (int *) 0x7fffffffe4c0
(gdb) print &arr[2]
$7 = (int *) 0x7fffffffe4c8

print 可简写为 p。


退出

quit                      // 退出gdb。

quit 可简写为 q。


回车

enter键                   // 重复执行上一条命令。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gdb