gdb 调试-打印

1. 打印大数组中的内容

在 gdb 中,如果要打印大数组的内容,缺省最多会显示 200 个元素。

可以使用:(gdb) set print elements number-of-elements 设置这个最大限制数

(gdb) set print elements unlimited 或者 (gdb) set print elements 0 设置为没有限制。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// code
int main() {
int array[300];
for (int i = 0; i < 300; i++) {
array[i] = i;
}
return 0;
}

// gdb 调试
(gdb) p array
$1 = {0, 1, 2, ... 198, 199...}
(gdb) set print elements 0
(gdb) p array
$2 = {0, 1, 2, ... 298, 299}

2. 打印数组中任意连续元素值

使用 p array[index]@num 命令来打印数组中任意连续元素的值。index 是数组索引(从 0 开始),num 是连续多少个元素。

1
2
(gdb) p array[10]@10
$3 = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}

3. 打印数组的索引下标

使用 set print array-indexes on 命令设置打印索引下标

1
2
3
(gdb) set print array-indexes on
(gdb) p array[10]@10
$4 = {[0] = 10, [1] = 11, [2] = 12, [3] = 13, [4] = 14, [5] = 15, [6] = 16, [7] = 17, [8] = 18, [9] = 19}

4. 打印函数局部变量的值

可以使用 bt full 命令(bt 是 backtrace 的缩写)。同时 bt full n 表示从内向外显示 n 个栈帧,bt full -n 表示从外向内显示 n 个栈帧。

也可以使用 info locals 打印当前函数局部变量的值。