Перемещаемые точки останова Visual Studio
Я первоначально использовал Visual Studio C++ Express, я переключился на ultimate и im в настоящее время смущен тем, почему отладчик перемещает мои точки останова, например:
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
Кажется, это делается в случайных местах в коде. Есть ли что-то, что я делаю неправильно? У меня никогда не было проблем с экспресс-версией, как это происходит.
1 ответов
отладки в режиме release.
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
, вы не можете установить точку останова там.
далее генерируется при компиляции в режиме release:
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;