Visual Studio在调试时随机在启动时中断断点

Visual Studio breaks on breakpoint on start randomly while debugging

本文关键字:中断 断点 启动 随机 调试 Visual Studio      更新时间:2023-10-16

在Visual Studio 2015调试器中启动Visual C++ATL/WTL应用程序时,有时一旦启动调试,Visual Studio就会中断一个不存在的断点,在经典的异常窗口中声明:

"Appname.exe遇到断点"
中断|取消|继续

没有提供有关该异常的其他信息。当我闯入时,有时它会说

没有可用的源代码

而其他一些时间是

帧不在模块中

无论哪种方式,当我点击"显示拆卸"时,我看到的是:

...
77038EFD  ?? ?? 
77038EFE  ?? ?? 
77038EFF  dec         dword ptr [ecx-76FBDBBCh]  
77038F05  pop         esp  
77038F06  and         al,8  
77038F08  jmp         __RtlUserThreadStart@8 (77025D93h)  
77038F0D  lea         ecx,[ecx]  
_KiFastSystemCall@0:
77038F10  mov         edx,esp  
77038F12  sysenter  
77038F14  lea         esp,[esp]  
77038F1B  jmp         _KiFastSystemCallRet@0 (77038F20h)  
...

它完全在上中断

77038EFF  dec         dword ptr [ecx-76FBDBBCh] 

如果我跨出、进入或继续,应用程序就会启动并正常工作。

编译应用程序时没有进行优化,并且启用了所有调试标志。正如我在一开始所说,这种情况只是偶尔发生,比如说三分之一的时候。应用程序在两次启动之间始终相同。

如果我在VS之外启动同一个应用程序,它就会正常工作。

你知道是什么导致了这种奇怪的行为吗?

事实证明,这种奇怪的行为似乎是由启用条件断点触发的。

即使断点被禁用,该行为也会继续保持,直到VS重新启动为止。