英文:
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 > main_debug_flags.LIST.c
The test code
It is quite simple:
#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;
}
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论