为什么GDB在以下示例中不打印宏的值?
❯ cat sample.c
#include <stdio.h>
#define M 42
int main(int argc, const char **argv)
{
printf("M: %d\n", M);
return 0;
}
❯ rm -f sample
❯ gcc -Wall -g3 -ggdb -gdwarf-2 sample.c -o sample
❯ gdb sample
gdb> break main
gdb> run
gdb> info macro M
The symbol `M' has no definition as a C/C++ preprocessor macro
at <user-defined>:-1
gdb> continue
Continuing.
M: 42
谢谢!
❯ gcc --version
Apple LLVM version 7.3.0 (clang-703.0.29)
❯ gdb --version
GNU gdb (GDB) 7.10.1
int main(int argc, char **argv)
,argv
是可修改的,所以不要加上const
。 - Iharob Al Asimimain
处中断,而不是在展开M
的行上(在到达其使用之前可能会重新定义M
)。 - Weather Vane