1

我正在尝试调试 C++ 程序,但在尝试打印数组的内容时遇到以下问题。
我在 c++ 程序中声明了一个字符数组,如下所示

using namespace std;
int main() {
    string s;
    cin >> s;
    char d[s.size()];
    int i=0;
    int j=0;
    while(j<s.size()) {
        if(s[j] != '+') {
            d[i++] = s[j];
        }   
        j++;
    }   
}

我使用下面的命令来编译上面的代码并运行 gdb

g++ -g main.cpp -o main
gdb main

但是,当我在 GDB 中调试并点击以下命令时,出现以下错误。

Command entered in GDB : p *d@10
No symbol "d" in current context.

你能告诉我我能做些什么来打印数组的所有内容吗?

4

2 回答 2

1

在您运行程序之前,没有要打印的变量。对于你的程序,你应该在最后一行设置一个断点main,然后运行程序。当程序在断点处停止时,您可以打印d.

(gdb) list 15
10          while(j<s.size()) {
11              if(s[j] != '+') {
12                  d[i++] = s[j];
13              }
14              j++;
15          }
16      }
(gdb) break 15
Breakpoint 1 at 0x80488b9: file x.cc, line 15.
(gdb) run
Starting program: /home/jxh/StackOverflow/gdb/a.out
1234567890

Breakpoint 1, main () at x.cc:15
15          }
(gdb) p *d@10
$2 = "1234567890"
(gdb)
于 2013-08-26T18:01:21.847 回答
0

确保关闭编译器优化。链接提供了更多详细信息。

于 2013-08-26T18:01:19.033 回答