I'm not sure what you are asking... Maybe...
let's assume you have the following code (prog.c)
then the program compiled with "gcc -DDEBUG prog.c" will print the string, but compiled with the usual "gcc prog.c" won't.
fprintf(stderr, "Debugging mode!\n");
the option -Dstring1 behaves like "#define string1" at the start of the code, and -Dstring1=string2 is equivalent to "#define string1 string2".
But all of this has nothing to do with debugging, just with including/excluding pieces of code, depending on a command line parameter. If you want to do "real" debugging, start with reading "man gdb" and "info gdb" (and compile with gcc -g prog.c).
I hope I answered you question somehow...