本文介绍了使用-g3或-ggdb3或-gdwarf-4,即使GDB宏符号不是present的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个C文件(sample.c文件):

I have this C file (sample.c):

#include <stdio.h>
#define M 42
#define ADD(x) (M + x)
int main ()
{
  printf("%d\n", M);
  printf("%d\n", ADD(2));
  return 0;
}

我编译:

$ gcc -O0 -Wall -g3 sample.c -o sample

然后用调试

$ gdb ./sample
GNU gdb (Gentoo 7.3.1 p2) 7.3.1
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.gentoo.org/>...
Reading symbols from /tmp/sample...done.
(gdb) macro list
(gdb) macro expand ADD(2)
expands to: ADD(2)
(gdb) print M
No symbol "M" in current context.
(gdb) q

这用来工作。我需要这个工作,因为我使用的#定义硬件外设和存储器地址名称库。

This used to work. I need this to work because I am using libraries which #define names for hardware peripherals and memory addresses.

这似乎是在是在。

我在做什么错了?

推荐答案

看起来像宏需带来的范围内这种或那种方式。如果你遵循完全相同的例子,您链接到网页上,他们的工作像宣传的那样(至少他们为我做的)。

Looks like the macros need to be "brought in scope" one way or another. If you follow exactly the examples in the page you link to, they work as advertised (at least they do for me).

示例( T.C 是您的源文件):

Example (t.c is your source file):

$ gcc -O0 -g3 t.c
$ gdb ./a.out 
GNU gdb (Gentoo 7.3.1 p2) 7.3.1
...
Reading symbols from .../a.out...done.
(gdb) info macro ADD
The symbol `ADD' has no definition as a C/C++ preprocessor macro
at <user-defined>:-1
             // Macros not loaded yet
(gdb) list main
1   #include <stdio.h>
2   #define M 42
3   #define ADD(x) (M + x)
4   int main ()
5   {
6     printf("%d\n", M);
7     printf("%d\n", ADD(2));
8     return 0;
9   }
(gdb) info macro ADD
Defined at /home/foo/tmp/t.c:3
#define ADD(x) (M + x)
             // Macros "in scope"/loaded
(gdb) macro expand ADD(42)
expands to: (42 + 42)
(gdb) macro expand M      
expands to: 42
(gdb) macro expand ADD(M)
expands to: (42 + 42)
(gdb) 

或者

$ gdb ./a.out 
GNU gdb (Gentoo 7.3.1 p2) 7.3.1
...
Reading symbols from .../a.out...done.
(gdb) macro expand ADD(1)
expands to: ADD(1)
             // Macros not available yet
(gdb) break main
Breakpoint 1 at 0x400538: file t.c, line 6.
(gdb) r
Starting program: /home/foo/tmp/a.out 
Breakpoint 1, main () at t.c:6
6     printf("%d\n", M);
(gdb) macro expand ADD(1)
expands to: (42 + 1)
             // Macros loaded
(gdb) 

这篇关于使用-g3或-ggdb3或-gdwarf-4,即使GDB宏符号不是present的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-10 03:52