2012-02-21 6 views
6

Первоначально я использовал Visual Studio C++ Express, я уже перешел на конечный, и им в настоящее время путают, почему отладчик шевелить контрольные точки, например:Visual Studio точки останова, перемещаемый

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

или

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

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

Кажется, что это делается в случайных местах в коде. Я когда-нибудь ошибаюсь? У меня никогда не было проблемы с экспресс-версией, как это случилось.

ответ

10

Вы отлаживаете режим выпуска.

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 

Обычно отладчики устанавливают крючки внутри двоичного кода. Если двоичный код не выполняется для int z = x/y, вы не можете установить там точку останова.

генерируется при компиляции этого в режиме выпуска следующее:

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

Чтобы проверить это, вы можете выполнить это простое изменение:

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

Я согласен, это самая likly причина, я бы также обратите внимание на то, что в прошлом я видел разрывы между строками, сообщаемыми через отладчик и IDE из-за различий в терминах завершения строки (NL vs CR NL). Я помню этот бит большой проблемой в продуктах Borland Delphi, но я не думаю, что это является проблемой VS VS. – tletnes

+0

@tletnes hmm интересно, я никогда не сталкивался с этим, хотя в VS. –

+0

Прямо на! Я полностью забыл, что я был в режиме выпуска. Спасибо! – kbirk

Смежные вопросы