在 Visual Studio 2015 调试器中启动 Visual C++ ATL/WTL 应用程序时,有时一旦启动调试,Visual Studio 就会在一个不存在的断点处中断,在经典的异常窗口中声明:
"Appname.exe has hit a breakpoint"
Break | Cancel | Continue
没有提供有关异常的其他信息。当我闯入时,有时它会说
No source code available
其他时候是
Frame not in module
无论哪种方式,当我点击“显示反汇编”时,这就是我看到的:
...
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]
如果我跳过、进入或继续,应用程序将启动并正常工作。
应用程序编译时没有优化,所有调试标志都打开。 正如我在开始时所说,它只是有时发生,比方说 1/3 的时间。应用程序在两次启动之间始终相同。
如果我在 VS 之外启动同一个应用程序,它会正常工作。
关于什么可能导致这种奇怪行为的任何想法?
最佳答案
事实证明,这种奇怪的行为似乎是通过启用条件断点触发的。
即使断点被禁用,该行为也会继续存在,直到 VS 重新启动。
关于c++ - Visual Studio 在调试时随机启动断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36623820/