使用 clang 编译程序时,可以在 gdb 中扩展 C 宏吗?

标签 c gdb clang c-preprocessor

我有一个获取整数的第 J 位的宏:

#define TWO_TO_THE(POWER) (1 << POWER)

#define JTH_BIT(BITS, J)  ((TWO_TO_THE((J-1)) & BITS) != 0)

但是,我不能通过发出命令 print JTH_BIT(i,j) 从 gdb 使用它,甚至可以在调试时使用 C 中的宏吗?

最佳答案

宏由预处理器处理。编译器甚至不知道它们。

但是,如果幸运的话,GCC 的选项 -g3 可以完成这项工作并生成允许 gdb 扩展宏的代码。

来自gdb documentation (我强调):

-glevel

[...] Level 3 includes extra information, such as all the macro definitions present in the program. Some debuggers support macro expansion when you use -g3.

关于使用 clang 编译程序时,可以在 gdb 中扩展 C 宏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21665376/

相关文章:

c - execvp() 系统调用未执行

c - GDB 和核心转储问题

c++ - Clang 8 与 MinGW-w64 : How do I use address- & UB sanitizers?

clang - 你如何为自己组装一个交叉编译器?

c - 如何使用 fscanf() 格式化字符串

c - 在不共享其源代码的情况下在 matlab 中运行 C 函数

c - 如何用 C 语言进行 64 位写入?

linux - GDB 不会加载源文件

c - Mac OS X Mavericks - gdb - 附加到进程时无法设置断点

c++ - 跨多个命名空间的 clang 错误 "explicit instantiation does not refer to a function template"