2011-01-05 11 views
25

ho output di debug nel mio programma come questo:#defines automatico secondo Debug/Release config in Visual Studio 2010

#ifdef DEBUG 
    std::cout << "[RE_words] " << re << std::endl; 
    try { 
     boost::regex regex(re); 
     std::cout << "[RE_words] " << "passed" << std::endl; 
    } catch (exception& e) { 
     std::cout << "[RE_words] " << "failed: " << e.what() << std::endl; 
    } 
#endif 

e DEBUG è definito nel mio programma manualmente. Esprimo sempre il commento quando faccio una versione di rilascio. In Visual Studio 2010 ci sono anche le "Configurazioni" per Debug vs Release versioni che gestiscono la riga di comando ecc. Utilizzata per la compilazione. Posso usare anche la configurazione "Debug" per definire automaticamente DEBUG nel compilatore? Come?

risposta

58

Visual Studio definisce automaticamente il simbolo _DEBUG per le build di debug (e NDEBUG per le build non di debug).

Un altro modo per farlo è quello di andare alle impostazioni del progetto -> proprietà di configurazione -> C/C++ -> preprocessore, e modificare manualmente le definizioni del preprocessore.

Vedere anche:
This answer spiega le differenze tra _DEBUG e NDEBUG in modo più dettagliato.
This answer spiega lo scopo del simbolo NDEBUG e se è definito dallo standard.

+6

Per inciso, NDEBUG è la soluzione portatile. È un po 'sfortunato che non esista un simbolo standard per le build di DEBUG. –

+0

Ciao, come puoi essere sicuro che vs definisca quelle macro? su msdn menziona solo _DEBUG, non NDEBUG, dove posso vedere una lista con tutti i macro che VS fa per te per favore? – Icebone1000

+0

@ Icebone1000: ho aggiunto un collegamento a una risposta che spiega se NDEBUG è o meno un simbolo standard e perché dovrebbe essere considerato portatile. Vedere la [lista di macro predefinite] (http://msdn.microsoft.com/en-us/library/b0084kay (v = vs.110) .aspx) nel VS. –

8

Utilizzare _DEBUG. Visual C++ lo definisce per una configurazione di debug. Controlla le direttive del preprocessore per la configurazione di debug nella finestra di dialogo delle proprietà del tuo progetto.

0

Sì, dovresti controllare la pagina delle opzioni del progetto, Compila-> Opzioni di compilazione avanzate. Tuttavia, VS di default definisce automaticamente la direttiva DEBUG per la modalità Debug.

+1

Credo che sia la direttiva '_DEBUG'. Nota il trattino basso. –

3

Anch'io ho pensato di dover solo esaminare la proprietà del preprocessore e rimuovere _DEBUG. Visual Studio cerca di dare una mano impostando _DEBUG se selezioni una delle opzioni della libreria run-time di debug.

Sulla proprietà pagina del progetto Proprietà di configurazione \ C/C++ \ Code Generation l'opzione selezionata per libreria di runtime colpisce diversi definisce. Quando si seleziona una libreria di debug (/MTd o /MDd) il _DEBUG definiscono è set.

Vedere MSDN /MD, /MT ... per ulteriori informazioni sugli interruttori. Ci sono diversi #defini che sono impostati in base a queste opzioni. Sono piuttosto invisibili quando provano a trovare chi imposta un #define prima di includere persino i file di intestazione !!