2012-02-10 13 views
5

sto usando (C++) di Visual Studio 2010.Punto di rottura nella modalità di rilascio

devo tracciare il flusso di controllo del mio appication.So che ho messo un punto di interruzione nel codice sorgente

mentre eseguendo l'app in modalità di debug, il punto di interruzione colpisce. Ma in modalità di rilascio non ha colpito.

Quindi, per favore suggerire una soluzione per riscaldare il punto di rottura in modalità di rilascio ???

+0

no. Questo è (uno dei motivi) per cosa è effettivamente la modalità di debug. Perché vuoi raggiungere il breakpoint in modalità di rilascio? –

+1

La modalità "Rilascio" consente le ottimizzazioni che possono (e spesso fanno) interrompere il flusso del codice. È molto difficile vedere che si verifica un problema con le ottimizzazioni attivate, ecco perché non sono abilitate in modalità "Debug". I programmatori generalmente lo usano per fare il debugging. Non vedi il problema che stai cercando di risolvere in modalità Debug? –

+1

E il linguaggio di programmazione è? –

risposta

7

Nella modalità di rilascio il codice è ottimizzato e può modificare il flusso del programma. Ad esempio, se una funzione è semplice e viene richiamata una sola volta, il compilatore può integrare la funzione in modalità di rilascio.

La modalità di debug non ha questo tipo di ottimizzazione ed è progettata per il debug del codice.

0

I breakpoint in modalità di rilascio sono utili per funzionare. Il modo più semplice per farlo funzionare è effettuare una chiamata a una funzione chiamata release_mode_breakpoint() nel codice. Quindi definire che funzione come questa:

#pragma optimize("", off) 
void release_mode_breakpoint() 
{ 
    int put_breakpoint_here = 1; 
} 
#pragma optimize("", on) 

si può quindi mettere un punto di interruzione in quella riga di dichiarazione int, e sarà colpito, anche nella modalità di rilascio. Quindi basta aumentare la pila del debugger alla funzione in cui si desidera effettivamente un punto di interruzione.

Non lasciare il codice nella versione finale di produzione, poiché la riga non ottimizzata potrebbe impedire al compilatore di ottimizzare la chiamata codice correttamente.

3

È possibile utilizzare __debugbreak() intrinisico. Questo è anche molto utile se vuoi rompere su una condizione specifica. Ad esempio:

if (var > LIMIT) 
    __debugbreak(); 
+0

non funziona in modalità di rilascio in VC++ 2013 –

12

Sto usando VS2015. dopo molte soluzioni fallite, ne ho trovato uno che funzionava per me. Deseleziona "Abilita solo il mio codice" in Menu-> Debug-> Opzioni-> Debug-> Generale. Vedere l'immagine allegata: enable debug in release mode-VS2015

Spero davvero che questo risolverà il problema per voi :)

+0

Questo ha risolto il mio problema. –

Problemi correlati