2012-02-21 11 views
6

All'inizio ho usato Visual Studio C++ Express, ho passato a definitiva e im attualmente confusa sul motivo per cui il debugger è in movimento i miei punti di interruzione, ad esempio:Visual Studio punti di interruzione viene spostato

if(x > y) { 
    int z = x/y;   < --- breakpoint set here 
} 
int h = x+y;    < --- breakpoint is moved here during run time 

o

random line of code  < --- breakpoint set here 
random line of code 

return someValue;  < --- breakpoint is moved here during run time 

Sembra farlo in posizioni casuali nel codice. C'è qualche volta che sto sbagliando qui? Non ho mai avuto un problema con la versione rapida di questo tipo.

risposta

10

Si sta eseguendo il debug in modalità di rilascio.

if(x > y) { 
    //this statement does nothing 
    //z is a local variable that's never used 
    //no executable code is generated for this line 
    int z = x/y;   < --- breakpoint set here 
} 
//the breakpoint is set on the next executable line 
//which happens to be this one 
int h = x+y;    < --- breakpoint is moved here during run time 

Di solito i debugger impostano i ganci all'interno del codice binario. Se non viene eseguito alcun codice binario per int z = x/y, non è possibile impostare qui un punto di interruzione.

Di seguito è generato mediante la compilazione di questo in modalità di rilascio:

if(x > y) 
{ 
    int z = x/y;//   < --- breakpoint set here 
} 
int h = x+y; 
cout << h; 
003B1000 mov   ecx,dword ptr [__imp_std::cout (3B203Ch)] 
003B1006 push  7  
003B1008 call  dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (3B2038h)] 

Per verificare ciò, è possibile eseguire questa semplice modifica:

if(x > y) { 
    int z = x/y; 
    std::cout << z << endl; // <-- set breakpoint here, this should work 
} 
int h = x+y;    
+0

Sono d'accordo questa è la causa più likly, lo farei notate anche che in passato ho visto disconnessi tra le righe segnalate tramite il debugger e l'IDE a causa delle diffrenze di terminazione di linea (NL vs CR NL) Ricordo che questo bing è un grosso problema nei prodotti Borland Delphi, ma non penso che questo è un problema con VS. – tletnes

+0

@tletnes hmm interessante, non l'ho mai incontrato in VS. –

+0

Proprio così! Ho completamente trascurato che ero in modalità di rilascio. Grazie! – kbirk

Problemi correlati