【问题标题】:call setbuf(stdout, NULL): no symbol "NULL" in the current context调用 setbuf(stdout, NULL):当前上下文中没有符号“NULL”
【发布时间】:2012-11-16 14:31:50
【问题描述】:

如果我想在gdb的调用语句中使用标识符NULL怎么办?

是因为我没有在 gdb 中包含 stdio.h 吗?

我已经尝试过:call #include <stdio.h>,但这似乎不起作用。

【问题讨论】:

    标签: c null gdb


    【解决方案1】:

    NULL 是一个 C 定义,在某处定义为:

    #define NULL ((void *) 0)
    

    NULL 被 C 预处理器替换为 ((void *) 0)。所以它永远不会传递给编译器,所以你不能在gdb中使用它。

    所以按照 Jester 的建议去做,只需使用 (void *) 0

    【讨论】:

    【解决方案2】:

    只需使用0(void*)0。没什么特别的。

    【讨论】:

      【解决方案3】:

      当前的 GCC 和 GDB 可以看到定义,但必须用 -ggdb3 编译,-g 是不够的。

      输入程序:

      #include <stdio.h>
      #define ABC 123
      
      int main() {
          return 0;
      }
      

      GDB:

      # start is required.
      start
      print ABC
      print NULL
      

      输出:

      $1 = 123
      $2 = (void *) 0x0
      

      在 Ubuntu 14.04 上使用 GCC 4.8 和 GDB 7.7.1 进行测试。

      另请参阅:How do I print a #defined constant in GDB?

      【讨论】:

        【解决方案4】:

        上面很好,0x0 也可以用于比较指针, 0x0 是 NULL 指向的内存地址。这是我在运行 gdb(在 MS-DOS 终端上)时使用的一个示例,用于打印内存地址并查看哪些指向 NULL 以调试分段错误:

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-01
        • 2021-04-20
        • 2019-03-05
        • 2011-04-08
        • 1970-01-01
        相关资源
        最近更新 更多