如何判断GCC或者G++ 编译的时候带了 -g选项?

时间:2022-10-21 02:20:36
-g 选项 带调试符的编译


我代码里面怎么判断他?

11 个解决方案

#1


好怪异的需求,楼主要干什么啊?

#2


我就是想知道 是否为调试版本 如果是调试版本 

在程序运行的时候我就打印日志信息,如果不是调试版本,我就不打印日志信息!

#3


额,楼主有想法。
一般是这样做的

#ifdef __DEBUG
         printf.......
#endif

编译时加-D__DEBUG就打印信息,不加就不打印。

#4


你用objdump -h 看看编译出来的elf文件
-g的会比不带-g的多一些debug段

#5


file program, 看non-striped没有

#6


我一般是看编译过程有没有-g选项。

#7


引用 3 楼 qiuxin315 的回复:
额,楼主有想法。
一般是这样做的

C/C++ code

#ifdef __DEBUG
         printf.......
#endif


编译时加-D__DEBUG就打印信息,不加就不打印。

一般都是这样做的吧

#8


学习了

#9


引用 7 楼 louyong0571 的回复:
引用 3 楼 qiuxin315 的回复:
额,楼主有想法。
一般是这样做的

C/C++ code

#ifdef __DEBUG
printf.......
#endif


编译时加-D__DEBUG就打印信息,不加就不打印。

一般都是这样做的吧

太狠了,我都没这样做过

#10


一般都是编译时做判断

如果非得判断-g,只能查debug段
linux下可以使用readelf

#11


如果是编译时确定的话7楼是通常的方法。简单有效。

如果想要自动判断编译后的二进制文件的话做出相应动作的话,可以写个脚本。
用objdump和readelf之类的工具查看文件,然后通过管道用grep之类的过滤器过滤下,根据grep给出的信息在脚本里自动判断有无debug段,然后再做相应的事情。。。
这样可以做到自动化。

#1


好怪异的需求,楼主要干什么啊?

#2


我就是想知道 是否为调试版本 如果是调试版本 

在程序运行的时候我就打印日志信息,如果不是调试版本,我就不打印日志信息!

#3


额,楼主有想法。
一般是这样做的

#ifdef __DEBUG
         printf.......
#endif

编译时加-D__DEBUG就打印信息,不加就不打印。

#4


你用objdump -h 看看编译出来的elf文件
-g的会比不带-g的多一些debug段

#5


file program, 看non-striped没有

#6


我一般是看编译过程有没有-g选项。

#7


引用 3 楼 qiuxin315 的回复:
额,楼主有想法。
一般是这样做的

C/C++ code

#ifdef __DEBUG
         printf.......
#endif


编译时加-D__DEBUG就打印信息,不加就不打印。

一般都是这样做的吧

#8


学习了

#9


引用 7 楼 louyong0571 的回复:
引用 3 楼 qiuxin315 的回复:
额,楼主有想法。
一般是这样做的

C/C++ code

#ifdef __DEBUG
printf.......
#endif


编译时加-D__DEBUG就打印信息,不加就不打印。

一般都是这样做的吧

太狠了,我都没这样做过

#10


一般都是编译时做判断

如果非得判断-g,只能查debug段
linux下可以使用readelf

#11


如果是编译时确定的话7楼是通常的方法。简单有效。

如果想要自动判断编译后的二进制文件的话做出相应动作的话,可以写个脚本。
用objdump和readelf之类的工具查看文件,然后通过管道用grep之类的过滤器过滤下,根据grep给出的信息在脚本里自动判断有无debug段,然后再做相应的事情。。。
这样可以做到自动化。