C++ VS中的不稳定行为

C++ VS中的不稳定行为,c++,visual-studio-2005,disassembly,C++,Visual Studio 2005,Disassembly,当我用->将断点放在行上时,有一个不稳定的行为,当我按F10时,它不会进入下一行,它只是跳出了块 在我看来,拆卸也很奇怪。。是这样的 if(!base_initialized())return; if(strcmp(fname,name) != 0) { -->std::string strentry; std::stringstream ss; 请注意带有箭头的两行。同一事物有多个定义。您是在启用还是禁用代码优化的情况下编译

当我用->将断点放在行上时,有一个不稳定的行为,当我按F10时,它不会进入下一行,它只是跳出了块

在我看来,拆卸也很奇怪。。是这样的

if(!base_initialized())return;  

    if(strcmp(fname,name) != 0)
    {
        -->std::string strentry;

        std::stringstream ss;   

请注意带有箭头的两行。同一事物有多个定义。

您是在启用还是禁用代码优化的情况下编译的?dude,strcmp?你贴了这个代码C++?谢谢!鲁本。。关闭了编译器优化,其工作正常。!:Dany在想为什么会发生这种情况?之所以会发生这种情况,是因为编译器能够发现您试图设置断点的代码没有做任何有用的事情,或者有一种方法可以做得更好,所以它将其删除或移动。优化器可以为您的程序带来神奇的效果:-
if(!base_initialized())return;  

    if(strcmp(fname,name) != 0)
    {
        -->>std::string strentry;
004013F0  mov         dword ptr [esp+0Ch],ebx 
004013F4  call        dword ptr [__imp_base_initialized (4071BCh)] 
004013FA  test        eax,eax 
004013FC  je          writetohashset+2C1h (401671h) 
00401402  mov         ecx,ebx 
00401404  mov         eax,esi 
00401406  mov         dl,byte ptr [eax] 
00401408  cmp         dl,byte ptr [ecx] 
0040140A  jne         writetohashset+76h (401426h) 
    if(!base_initialized())return;  

    if(strcmp(fname,name) != 0)
0040140C  test        dl,dl 
0040140E  je          writetohashset+72h (401422h) 
00401410  mov         dl,byte ptr [eax+1] 
00401413  cmp         dl,byte ptr [ecx+1] 
00401416  jne         writetohashset+76h (401426h) 
00401418  add         eax,2 
0040141B  add         ecx,2 
0040141E  test        dl,dl 
00401420  jne         writetohashset+56h (401406h) 
00401422  xor         eax,eax 
00401424  jmp         writetohashset+7Bh (40142Bh) 
00401426  sbb         eax,eax 
00401428  sbb         eax,0FFFFFFFFh 
0040142B  test        eax,eax 
0040142D  je          writetohashset+2C1h (401671h) 
    {
        -->>std::string strentry;
00401433  lea         ecx,[esp+0B4h] 
0040143A  call        dword ptr [__imp_std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> > (407084h)] 

        std::stringstream ss;