如何检测命令行发出的GCC标志-g?

jpfvwuh4  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(237)

如何检测命令行发出的GCC标志-g?

我正在尝试一些GCC的标志,看看当我们在命令行发出标志-g时,它是否定义了预处理器的任何宏。
例如,当我们标记-fpie-fPIE时,两者都定义了宏__pie____PIE__
所以,我想知道如果我们标记-g-g3,类似的事情会发生。
我做了一些测试,但cpp清单上没有任何结果。

$ gcc -g3 -E main_debug_flags.c > main_debug_flags.LIST.c

测试代码

很简单:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{

#ifndef DEBUG
    printf("DEBUG not defined!\n");
#else
    printf("DEBUG defined!\n");
#endif

#ifndef NDEBUG
    printf("NDEBUG not defined!\n");
#else
    printf("NDEBUG defined!\n");
#endif

    return 0;
}

有人知道吗?也许,任何人都面临过同样的疑问!
另一种方法是手动定义宏-DDEBUG,以确保代码将通过一些预处理器检查进行编译。

读数

我查了一些文件,但什么都没查到!

  • GCC:The Complete Reference,by亚瑟Griffith(McGraw-Hill/Osborne)
  • The Definitive Guide to GCC Second Edition,by William von哈根(Apress,2006)
  • 使用GNU编译器集合,用于gcc版本13.0.0

我编译了一个简单的代码,调试标志打开,并检查预处理器输出,看看是否有什么东西出现。但是什么都没有!
我想做的是用#ifdef检测-g标志,并包含额外的代码来帮助调试应用程序本身!

hjzp0vay

hjzp0vay1#

不,没有内置的宏来提供调试信息,类似于gcc的__OPTIMIZE__来优化。有一个简单的理由-调试信息可以是外部的,也可以在编译后从二进制文件中剥离。

相关问题