【问题标题】:Hi, I am kind of confused, I was just playing around with gdb in linux and I ran into this嗨,我有点困惑,我只是在 linux 中玩 gdb,我遇到了这个
【发布时间】:2013-10-28 00:37:54
【问题描述】:

我的问题是,当我要求调试器表示数组中的元素时,数字代表什么?我知道它不能是 ASCII 或 5 的二进制表示,它是特定 int 5 的内存位置吗?

Breakpoint 1, main () at ArrnLoops.c:5

5     int  num[] = {5,15,25,45};

(gdb) display i
1: i = 2981876
(gdb) display num

2: num = {1466917, 1176192, 0, 134513753}

【问题讨论】:

  • 你是指5/1: /2: 还是29818761466917等?

标签: c linux ubuntu terminal gdb


【解决方案1】:

它正在显示内容。请记住,当您在第 5 行中断时,第 5 行尚未执行,因此尚未发生初始化。它会向您显示当前在这些内存位置的任何随机值。

【讨论】:

    【解决方案2】:

    我不确定您所说的int 5 是什么意思。 5哪里来的?

    我猜你看到的只是数组num的当前内容。

    执行在num 的定义处停止,num 的内存已经存在,但尚未执行初始化。所以,你看到的是num 中的垃圾值。

    如果您跳到下一行并再次显示num,您将看到{5,15,25,45}

    这可能也适用于i,尽管从您发布的内容中无法看出i 的定义位置。

    【讨论】:

    • 我认为int 5 表示他的数组的第一个元素。
    【解决方案3】:

    那些不是内存位置。它们被称为垃圾值。直到一个数组元素没有被明确分配它包含一个垃圾值。

    【讨论】:

      【解决方案4】:
      Breakpoint 1, main () at ArrnLoops.c:5
      
      5     int  num[] = {5,15,25,45};
      

      行首的5 是行号。如果您 step 或转到 next,您将看到该命令的行号。

      display 命令中,n: 只是一个结果跟踪号。我还没有弄清楚如何在其他表达式中直接使用它,但如果你使用 print (p) 代替,你会看到类似的内容:

      (gdb) p i
      $1 = 2981876
      

      然后你可以在其他表达式中使用结果:

      (gdb) p $1 / 100
      $2 = 29818
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-01
        • 1970-01-01
        相关资源
        最近更新 更多