【发布时间】:2012-11-16 14:31:50
【问题描述】:
如果我想在gdb的调用语句中使用标识符NULL怎么办?
是因为我没有在 gdb 中包含 stdio.h 吗?
我已经尝试过:call #include <stdio.h>,但这似乎不起作用。
【问题讨论】:
如果我想在gdb的调用语句中使用标识符NULL怎么办?
是因为我没有在 gdb 中包含 stdio.h 吗?
我已经尝试过:call #include <stdio.h>,但这似乎不起作用。
【问题讨论】:
NULL 是一个 C 定义,在某处定义为:
#define NULL ((void *) 0)
NULL 被 C 预处理器替换为 ((void *) 0)。所以它永远不会传递给编译器,所以你不能在gdb中使用它。
所以按照 Jester 的建议去做,只需使用 (void *) 0。
【讨论】:
NULL 现在可以与-ggdb3 一起使用:stackoverflow.com/a/31680508/895245
只需使用0 或(void*)0。没什么特别的。
【讨论】:
当前的 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 进行测试。
【讨论】:
【讨论】: