如何检测在命令行上使用的GCC标志“-g”?

huangapple go评论61阅读模式
英文:

How to detect the GCC flag -g issued on command line?

问题

如何检测在命令行上使用的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未定义!\n");
#else
    printf("DEBUG已定义!\n");
#endif

#ifndef NDEBUG
    printf("NDEBUG未定义!\n");
#else
    printf("NDEBUG已定义!\n");
#endif

    return 0;
}

有人有任何想法吗?也许有人有同样的疑问!

另一种方法是手动定义宏“-DDEBUG”,以确保代码将使用一些预处理器检查编译。

阅读材料

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

  • 《GCC:完全参考》,作者Arthur Griffith(McGraw-Hill/Osborne)
  • 《GCC权威指南第二版》,作者William von Hagen(Apress,2006)
  • 《使用GNU编译器集合,适用于gcc版本13.0.0》

我编译了一个带有调试标志的简单代码,并检查预处理器输出,看看是否有什么显示出来。但是没有!

我想要做的是使用#ifdef检测“-g”标志,并包含附加代码以帮助调试应用程序本身!

英文:

How to detect the GCC flag -g issued on command line?

I'm trying some flags ono GCC to see if when we issue a flag -g at command line it's defined any macro to pre-processor.

An example is when we flag -fpie and -fPIE, both define the macros __pie__ and __PIE__.

So, I'm wondering if we flag -g or -g3, something similary will gone happen.

I did a few tests, but nothing came up on the cpp listing.

$ gcc -g3 -E main_debug_flags.c &gt; main_debug_flags.LIST.c

The test code

It is quite simple:

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
int main(int argc, char *argv[])
{

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

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

    return 0;
}

Does anybody has any idea? Maybe, Any one has faced the same doubt!

The alternative is to define by hand the macro -DDEBUG to make sure the code will be compiled with some pre-processor checks.

The readings

I did a little digging into a few documents, but nothing came up!

  • GCC: The Complete Reference, by Arthur Griffith (McGraw-Hill/Osborne)
  • The Definitive Guide to GCC Second Edition, by William von Hagen (Apress, 2006)
  • Using the GNU Compiler Collection,For gcc version 13.0.0

I have compile a simple code with debug flag on and check the pre-processor output to see if something shows up. But nothing!

What I wanna do is detect with #ifdef the -g flag and include addition code to help DEBUG the application itself!

答案1

得分: 1

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

英文:

No, there is no build-in macros for debug info similar to gcc's __OPTIMIZE__ for optimization. There is simple rationale - debug information can be external or can be stripped from binary after compilation.

huangapple
  • 本文由 发表于 2023年6月1日 20:23:52
  • 转载请务必保留本文链接:https://go.coder-hub.com/76381826.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定