我想正常打印
最好的办法是编写一个print_board 例程,然后您可以从 GDB 调用它。
(这在 GDB 中相当困难)。
那是因为你让事情变得艰难。
问题在于,您的板子不是在内存中连续(按照惯例,在 GDB 中打印很简单),而是分散在 64 个单独的块中,每个块有 2 个值。
由于您使用的是 C++,因此最好使用向量向量:
vector<vector<int>> board;
board.resize(col);
for (int i = 0; i < col; i++) {
board[i].resize(row);
}
(gdb) print board
$1 = std::vector of length 64, capacity 64 =
{std::vector of length 2, capacity 2 = {0, 0},
std::vector of length 2, capacity 2 = {0, 0},
...
附:提问时,显示实际代码会有所帮助。您的问题的board 类型错误,并且将board 与array 混合在一起。
更新:
我该怎么做(使用 GDB 中的 print_board)?
这是一个例子。假设您的源代码如下所示:
1 #include <stdio.h>
2
3 int main()
4 {
5 int col = 16, row = 2;
6 int **board = new int*[col];
7
8 for (int i = 0; i < col; i++) {
9 board[i] = new int[row];
10 }
11
12 // Initialize elements to something interesting, so we can see them
13 // printed.
14 for (int i = 0; i < col; i++)
15 for (int j = 0; j < row; j++)
16 board[i][j] = 100*i + j;
17
18 return 0;
19 }
20
21 void print_board(int **board, int col, int row)
22 {
23 for (int j = 0; j < row; j++) {
24 for (int i = 0; i < col; i++) {
25 printf("\t%d", board[i][j]);
26 }
27 printf("\n");
28 }
29 }
然后,使用 GDB:
gdb -q ./a.out
(gdb) break 18
(gdb) run
Breakpoint 2, main () at t.cc:18
18 return 0;
(gdb) call print_board(board, col, row)
0 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500
1 101 201 301 401 501 601 701 801 901 1001 1101 1201 1301 1401 1501
瞧