Debugging in release mode.
if(x > y) { //this statement does nothing //z is a local variable that 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
Typically, debuggers set hooks inside binary code. If binary code is not executed for int z = x/y
, you cannot set a breakpoint there.
The following compilation in release mode is generated:
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 verify this, you can make this simple change:
if(x > y) { int z = x/y; std::cout << z << endl;
source share