更新时间:2023-02-27 14:18:58
您正在发布模式下调试。
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
通常调试器在二进制代码中设置钩子。如果没有为 int z = x / y
执行任何二进制代码,则无法在此处设置断点。
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;