2012-02-21 17 views
6

pierwotnie wykorzystywane Visual Studio C++ Express, ja już przełączony na ostateczny i im obecnie zdezorientowani, dlaczego debugger porusza moje punkty przerwania, na przykład:Visual Studio breakpoints przemieszczane

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

lub

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

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

Wygląda na to, że robi to przypadkowo w kodzie. Czy jest tu coś, co robię źle? Nigdy nie miałem problemu z tak szybką wersją ekspresową.

Odpowiedz

10

Użytkownik debuguje w trybie zwolnienia.

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 

Zwykle debuggery ustawiają haki wewnątrz kodu binarnego. Jeśli nie zostanie wykonany żaden kod binarny dla int z = x/y, nie można tam ustawić punktu przerwania.

jest generowana przez kompilacji to w trybie zwolnienia następujący:

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)] 

Aby to sprawdzić, można wykonać tę prostą zmianę:

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

Zgadzam jest to najbardziej likly przyczyna, chciałbym zauważmy również, że w przeszłości zauważyłem rozbieżności między liniami zgłaszanymi przez debuggera i IDE z powodu różnic w zakończeniu linii (NL vs CR NL). Przypominam sobie, że jest to duży problem w produktach Borland Delphi, ale nie sądzę, że jest problemem z VS. – tletnes

+0

@tletnes hmm ciekawe, nigdy nie spotkałem tego chociaż w VS. –

+0

Już! Całkowicie przeoczyłem, że byłem w trybie zwolnienia. Dziękuję Ci! – kbirk