8

如果我想NULLgdb's call 语句中使用标识符,我该怎么办?

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

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

4

4 回答 4

6

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

#define NULL ((void *) 0)

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

所以按照Jester的建议去做,然后使用(void *) 0.

于 2012-11-16T16:00:04.117 回答
5

只需使用0or (void*)0。没有什么花哨。

于 2012-11-16T15:23:48.610 回答
3

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

输入程序:

#include <stdio.h>
#define ABC 123

int main() {
    return 0;
}

广发银行:

# start is required.
start
print ABC
print NULL

输出:

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

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

另请参阅:如何在 GDB 中打印 #defined 常量?

于 2015-07-28T15:16:24.473 回答
0

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

于 2021-12-08T06:12:54.903 回答