“g++ - 在生产环境中使用"-g"标志是否明智?”

21

为了提供一些背景,我在这里讨论的是使用g++编译C++代码。

我可以理解在生产构建中包含-g标志对于维护来说会很方便:如果程序意外崩溃,它将更容易调试。

我的问题是,除了增加可执行文件的大小之外,包含-g标志是否会以其他方式影响输出可执行文件?它是否会使代码变慢(例如关闭某些优化)?

据我所了解,它不应该会有影响(文档只提到包括调试符号),但我不确定。

2个回答

19

-g选项不影响代码生成,只改变符号表和调试元数据。它们不存储在可执行代码段中,因此即使在不使用调试器运行代码时,也不会影响性能。


代码安全怎么样?保留调试器信息是否会让二进制更容易泄漏信息呢?例如,在缓冲区溢出的情况下,系统可能会发送其二进制数据,如果这些数据是调试信息,那么就像发送源代码一样,这可能会导致进一步的调查和可利用的攻击。 - b.g.

1
我的问题是,除了增加可执行文件的大小之外,包含-g标志是否会以其他方式影响输出可执行文件?
不会,完全可以生成带有调试信息的优化二进制文件,这不会以任何方式影响正常代码(尽管该信息可能不太有用,因为变量有时不需要存在,内联函数更难调试等)。
Debian发行版使用调试信息构建软件包,稍后将其剥离(有时拆分为“调试软件包”)。
但请注意,大小增加可能相当大。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接