C ++ gdb打印数组在上下文中给出无符号“d”

时间:2013-08-26 17:39:13

标签: c++ gdb

我正在尝试调试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.

请告诉我能做什么,以便打印阵列的所有内容?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

确保关闭编译器优化。 This链接提供了更多细节。