用gcc 的-D 参数来调试代码

原创 2011年01月13日 10:25:00

用gcc 的-D 参数来调试代码

关键词gcc    -Dmacro    调试                                          

写代码免不了要加入调试信息,在程序头定义一个DEUBG开关很烦,不过gcc早就想到了,有-D选项。
man gcc
或者
man gcc | col -b > gcc.txt
相关信息如下:
GCC(1)                               GNU                               GCC(1)



NAME
       gcc - GNU project C and C++ compiler

SYNOPSIS
       gcc [-c|-S|-E] [-std=standard]
           [-g] [-pg] [-Olevel]
           [-Wwarn...] [-pedantic]
           [-Idir...] [-Ldir...]
           [-Dmacro[=defn]...] [-Umacro]
           [-foption...] [-mmachine-option...]
           [-o outfile] infile...

       Only the most useful options are listed here; see below for the
       remainder.  g++ accepts mostly the same options as gcc.

-----------------------

       Preprocessor Options
           -Aquestion=answer -A-question[=answer] -C  -dD  -dI  -dM  -dN
           -Dmacro[=defn]  -E  -H -idirafter dir -include file  -imacros file
           -iprefix file  -iwithprefix dir -iwithprefixbefore dir  -isystem
           dir -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc -P  -fwork-
           ing-directory  -remap -trigraphs  -undef  -Umacro  -Wp,option
           -Xpreprocessor option
----------------------
       -D name
           Predefine name as a macro, with definition 1.

       -D name=definition
           Predefine name as a macro, with definition definition.  The con-
           tents of definition are tokenized and processed as if they
           appeared during translation phase three in a #define directive.
           In particular, the definition will be truncated by embedded new-
           line characters.

           If you are invoking the preprocessor from a shell or shell-like
           program you may need to use the shell's quoting syntax to protect
           characters such as spaces that have a meaning in the shell syntax.

           If you wish to define a function-like macro on the command line,
           write its argument list with surrounding parentheses before the
           equals sign (if any).  Parentheses are meaningful to most shells,
           so you will need to quote the option.  With sh and csh,
           -D'name(args...)=definition' works.

           -D and -U options are processed in the order they are given on the
           command line.  All -imacros file and -include file options are
           processed after all -D and -U options.


       -U name
           Cancel any previous definition of name, either built in or pro-
           vided with a -D option.
-----------------------------------
 -D 定义宏(D-define)

-D定义宏有两种情况,一种是-DMACRO 相当于程序中使用#define MACRO 另外可以-DMACRO=A 相当于程序中使用#define MACRO A 这只是一个编绎参数,在连接时没有意义
如: $gcc -c hello.c -o hello.o -DDEBUG
上面为hello.c定义了一个DEBUG宏,某些情况下使用-D 代替直接在文件中使用#define,也是为了避免修改源代码双。例如一个程序希望在开发调试的时候能打印出调试信息,而正式发布的时候就不用打印了,而且发布前不用修改源代码双。可以这样
#ifdefine DEBUG
printf("debug message/n");
#endif
对于这段代码,平时调试的时候就加上-DDEBUG 发布时不用-D选项
与之对应的是-UMACRO参数,相当于#undef MACRO,取消宏定义

============hello.c======
#include <stdio.h>
#include <stdlib.h>

int main()
{
#ifdef DEBUG
        printf("this is before/n");
#endif
        printf("helloworld/n");
#ifdef DEBUG
        printf("this is end/n");
#endif
        exit(0);
}

$gcc -c hello.c -o hello.o -DDEBUG -Wall
则./hello输出:
this is before
helloworld
this is end

$gcc -c hello.c -o hello.o -Wall
则./hello输出:
helloworld

方便!

用gcc 的-D 参数来调试代码

写代码免不了要加入调试信息,在程序头定义一个DEUBG开关很烦,不过gcc早就想到了,有-D选项。man gcc或者man gcc | col -b > gcc.txt相关信息如下:GCC(1)   ...
  • zach_chao
  • zach_chao
  • 2010年04月09日 17:27
  • 226

Linux下使用gcc和gdb调试程序

1. gcc 1> 编译动态链接库 gcc -shared hello.c -o libhello.so 2>编译主程序文件 gcc -g -rdynamic -o main main.c -ldl ...
  • kacylining
  • kacylining
  • 2016年01月12日 14:35
  • 564

软考复习专题四---多媒体专题

专题四:多媒体专题 1.1多媒体知识概述  1.基本概念  多媒体信息一般指用文本、图形、图像、动画、音频和视频影像等形式表示的信息。 多媒体计算机技术是指利用计算机交互地综合处理相互之间有联系的文...
  • u011680118
  • u011680118
  • 2015年04月30日 11:37
  • 561

python加上-O参数, 生成优化后的*.pyo文件

作用是使用1.优化编译后文件。2.内建参数 __debug__ 为 False3.使 assert False 语句不起作用今天看代码发现flup库中使用 __debug__一变量的地方还不少。  -...
  • toontong
  • toontong
  • 2010年08月26日 11:00
  • 748

多媒体基础知识(软考复习资料)

多媒体信息一般指用文本、图形、图像、动画、音频和视频影像等形式表示的信息。多媒体计算机技术是指利用计算机交互地综合处理相互之间有联系的文本、图形、图像、动画、音频、视频等多种信息。多媒体的主要特性表现...
  • wuyixiaozi
  • wuyixiaozi
  • 2008年09月17日 15:39
  • 777

TOP用参数来代替

昨天做项目时,要求传入一个参数, 选择前几条数据,  两种方法都可以。create   proc   topproc       @num   int     as       exec(select...
  • zj_2009
  • zj_2009
  • 2007年11月15日 12:51
  • 216

matlab中plot画图参数的设置

Matlab画图中的参数设置
  • liuqiyu
  • liuqiyu
  • 2016年11月04日 21:39
  • 361

ThreadLocal内部机制及使用方法

一、介绍ThreadLocal内部机制之前,先简单说明一下其特点及用途: 1.ThreadLocal是单线程内共享资源,多线程间无法共享(即线程A访问不了线程B中ThreadLocal存放的值); ...
  • yy193728
  • yy193728
  • 2016年09月09日 09:56
  • 180

gcc 部分参数

cc and g++分别是gnu的c & c++编译器   gcc/g++在执行编译工作的时候,总共需要4步   1.预处理,生成.i的文件[预处理器cpp](把"include"的文件拷贝到...
  • shendayjy
  • shendayjy
  • 2014年07月29日 18:33
  • 392

hive相关常见错误

hive调优
  • kaichao
  • kaichao
  • 2015年06月25日 22:16
  • 160
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用gcc 的-D 参数来调试代码
举报原因:
原因补充:

(最多只允许输入30个字)