C ++命令行调试参数

时间:2012-09-24 23:03:59

标签: c++ c debugging command-line

当我通过命令行运行程序时,如何更改布尔宏的值?例如,假设我的cpp文件中有以下宏,称之为MyCpp.cpp

#define DEBUG 1

运行程序时如何更改?通过命令行:

g++ -Wall -Wextra -o MyCpp MyCpp.cpp

我很确定你指定了某种命令行选项,这会响铃吗? 另外,我不想使用argv[]

3 个答案:

答案 0 :(得分:4)

首先,更改源代码:

#ifndef DEBUG
#  define DEBUG 1
#endif

现在你可以在命令行上说:

g++ -Wall -Wextra -o MyCpp MyCpp.cpp -DDEBUG=5
#                                    ^^^^^^^^^

命令行参数-DFOO=bar与将#define FOO bar放入源代码具有相同的效果;你需要#ifndef守卫来避免非法重新定义宏。


有时人们会使用辅助宏阻止定义另一个宏:

#ifndef SUPPRESS_FOO
#  define FOO
#endif

// ... later

#ifdef FOO
// ...
#endif

现在在代码中说-DSUPPRESS_FOO定义FOO ...

答案 1 :(得分:1)

  

当我通过命令行运行程序时,如何更改布尔宏的值?

目前,你不能。您正在使用预处理程序符号,因此决定是否应打印调试信息是编译时决定。您将不得不将编译时DEBUG符号更改为通过解析命令行,通过在运行时读入的某个配置文件或两者来设置的运行时变量。

解析命令行并不难。有很多低级C风格的工具可以帮助你做到这一点。 Boost有一个更强大的基于C ++的方案。然后,技巧是将那些编译时调试决策更改为运行时决策。最简单的说,并不难:只需用全局变量替换DEBUG预处理器符号即可。当然,你可以比这更复杂。最终,您将拥有可配置的日志记录系统。 Boost也有。

答案 2 :(得分:0)

请注意以下事项。如果您有c / cpp文件或其中一个包含的头文件:

#define DEBUG 1

然后您无法使用编译器的命令行(makefile)修改此定义。根本没有机会。 cpp文件只会覆盖命令行设置。