Reputation: 4022
I originally used Visual Studio C++ Express, i've switched to ultimate and im currently confused as to why the debugger is moving my breakpoints, for example:
if(x > y) {
int z = x/y; < --- breakpoint set here
}
int h = x+y; < --- breakpoint is moved here during run time
or
random line of code < --- breakpoint set here
random line of code
return someValue; < --- breakpoint is moved here during run time
It seems to do this at random locations in the code. Is there sometime i'm doing wrong here? I've never had an issue with the express version like this happening.
Upvotes: 8
Views: 3332
Reputation: 258648
You are debugging in release mode.
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
Usually debuggers set hooks inside binary code. If no binary code is executed for int z = x/y
, you can't set a breakpoint there.
The following is generated by compiling this in release mode:
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)]
To test this, you can perform this simple change:
if(x > y) {
int z = x/y;
std::cout << z << endl; // <-- set breakpoint here, this should work
}
int h = x+y;
Upvotes: 14