什么是调试模式 w.r.t C++.

What is a debug mode w.r.t C++?

本文关键字:C++ 模式 调试 什么      更新时间:2023-10-16

从这里: http://google-glog.googlecode.com/svn/trunk/doc/glog.html

调试模式支持
特殊的"调试模式"日志记录宏仅在调试模式下起作用,对于非调试模式编译,则编译为无。

"调试模式"是什么意思C++程序?

当我们在程序上使用GDB时,我们可以说它处于调试模式吗?

">

调试模式"有三个方面。

许多库(

包括标准库(在调试模式下编译时会插入调试帮助代码(数组边界检查、不变断言等(。它们在生产/非调试模式下删除这些检查以提高性能。

编译器具有调试开关。设置库用于检测是否为调试进行编译的调试宏,并在生成的二进制文件中插入调试符号。这有助于调试器在正在运行的二进制代码和生成它的源代码之间建立链接。

在调试器中运行程序是一种"运行时调试模式"。可以在调试器中运行可执行文件,无论它是否为调试而生成。你将通过调试版本获取更多信息。

所有这三种"调试模式"都是独立的。您(通常(可以通过手动设置适当的宏/定义来编译生产版本中的库调试检查,而无需要求编译器输出调试符号。

这些都不是特定于C++(或 C(的。许多其他语言都有这些概念。

">

调试模式"可以指很多东西,但在这种情况下,它指的是在没有定义NDEBUG宏的情况下进行编译。从您链接到的页面(强调我的(:

DFATAL 严重性在调试模式下记录致命错误(即,没有定义 NDEBUG 宏(,但通过自动将严重性降低到 ERROR,避免在生产中停止程序。

C++程序(如C(通常具有基于预处理器宏的不同构建配置,这些宏可以从命令行传递。

规范调试模式标志是宏NDEBUG,如果定义,则表示您不在调试模式下。(它可以更清楚地命名为PRODUCTION,但遗憾的是,它是根据它不是什么来命名的。

NDEBUG是标准的,也是古老的。它由<cassert>标头使用,在 C 中称为 <assert.h>。它的官方功能是将assert宏变成无操作,但它通常也会在检查边界和要求方面影响C++标准库。

例如,g++ -DNDEBUG myProg.cpp -o myProg 应该在没有与调试相关的运行时功能的情况下进行编译。

请注意,这与为调试器生成符号支持不同,调试器由 GCC 上的 -g 或其他平台的其他标志控制。