您的问题似乎暗示您不了解宏是什么。当然你不能进入宏。
-g3 对于“宏重”程序非常有用。考虑:
int main()
{
int i;
for (i = 0; i < 20; ++i) {
#define A(x) case x: printf(#x "\n"); break
switch(i) {
A(1); A(2); A(3); A(4); /* line 7 */
#undef A
#define A(x) case 10+x: printf("10+" #x "\n"); break
A(1); A(2); /* line 10 */
}
}
return 0;
}
如果没有 -g3,当您在第 7 行或第 10 行停止时,您可能需要大量搜索 A() 的定义,并且可能有很多这样的定义,因此您必须找出哪个是“当前”。
使用 -g3,GDB 可以为您完成繁重的工作:
(gdb) b 7
Breakpoint 1 at 0x4004cc: file m.c, line 7.
(gdb) b 10
Breakpoint 2 at 0x4004fc: file m.c, line 10.
(gdb) r
Breakpoint 1, main () at m.c:7
7 A(1); A(2); A(3); A(4);
(gdb) info macro A
Defined at /tmp/m.c:5
#define A(x) case x: printf(#x "\n"); break
(gdb) c
1
2
3
4
Breakpoint 2, main () at m.c:10
10 A(1); A(2);
(gdb) info macro A
Defined at /tmp/m.c:9
#define A(x) case 10+x: printf("10+" #x "\n"); break
(gdb) q