C++ VS中的不稳定行为
当我用->将断点放在行上时,有一个不稳定的行为,当我按F10时,它不会进入下一行,它只是跳出了块 在我看来,拆卸也很奇怪。。是这样的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; 请注意带有箭头的两行。同一事物有多个定义。您是在启用还是禁用代码优化的情况下编译
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;