【发布时间】:2016-06-03 11:05:45
【问题描述】:
为什么 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
【问题讨论】:
-
只是问一下,如果你删除
-O2有什么不同吗? -
@SouravGhosh 没有效果 =(
-
在c 中应该是
int main(int argc, char **argv)argv是可修改的,所以没有const。 -
@iharob 谢谢,但仍然没有效果 =/
-
您是否尝试过使用其他编译器?如果 gdb 不能打印宏的信息,那是因为你的编译器没有在 DWARF 中添加关于它的信息。您可以使用命令
readelf --debug-dump=macro sample来检查您的 ELF 中有哪些宏信息。