Codeblocks debug preprocessor

后端 未结 2 813
一整个雨季
一整个雨季 2021-01-12 18:07

I\'m writing a C++ Program with Codeblocks and for debugging-purposes I need to know if the Building-Target of Codeblocks is set to \"DEBUG\" or to \"RELEASE\".

I al

相关标签:
2条回答
  • 2021-01-12 18:29

    The usual way, as suggested by assert(3) man page and habits (with <assert.h> in C or <cassert> in C++), is to define NDEBUG at the command line (e.g. to compile with gcc -Wall -DNDEBUG) for non-debug compilation. In your Makefile you could CPPFLAGS += -DNDEBUG in release mode (and compile with g++ -Wall -g in debug mode).

    My own habit might be to have something like

    #ifndef NDEBUG
    #define dbgprintf(Fmt,...) do{fprintf(stderr,"%s:%d:" Fmt "\n", \
                                   __FILE__, __LINE__, \ 
                                  ##__VA_ARGS__);}while(0)
    #else
    #define dbgprintf(Fmt,...) do{}while(0)
    #endif
    

    in a common header file, and to use dbgprintf("i=%d", i) elsewhere in the code. Notice that I use constant string catenation on the Fmt macro argument, that I append a constant newline to it, and that my debugging output contains the source file name and line number (you might also use __func__ if you like). In pure C++ code, I might instead have

    #ifndef NDEBUG
    #define DBGOUT(Out) do{std::out << __FILE__ << ":" << __LINE__ \
                           << " " << Out << std::endl;}while(0)
    #else
    #define DBGOUT(Out) do{}while(0)
    #endif
    

    and use DBGOUT("i=" << i) with the advantage of using specific definitions of operator << for my types.

    0 讨论(0)
  • 2021-01-12 18:36

    Do I have to define DEBUG on my own and change it, everytime I change the Building-Target, or is there a word I don't know?

    I don't know what, if anything is set by default by Code::Blocks. But, if you define your own #defines

    Project->Build options...->[Debug|Release]->#defines 
    

    you don't have to change them as you switch between build targets (DEBUG or RELEASE). It lets you define values that are specific to the Debug build, as well as values that are specific to the Release build.

    To avoid having to manually enter it each time for each new project you can make a small project with just your Debug/Release #defines and save that as a project template and then create new projects from that project template.

    0 讨论(0)
提交回复
热议问题