为什么我的服务在Vista上的DebugBreak()崩溃?

viv*_*dos 3 crash service winapi breakpoints windows-vista

我正在用C++编写Win32服务.我有一个自定义Assert宏调用DebugBreak()(以及其他东西).当我在Vista下运行我的服务时,服务在到达DebugBreak()调用(int 3汇编程序操作码)时崩溃,显示vista崩溃对话框.错误代码是80000003(硬编码断点).

通常我希望我的服务运行在DebugBreak()调用上,而不会在没有附加调试器的情况下执行任何操作.为什么会崩溃?是否有可能进行更改以使其继续运行?

dee*_*mok 6

它崩溃了,因为它是一个断点异常.为了安全起见,您需要检查是否附加了调试器:

if(:: IsDebuggerPresent()):: DebugBreak();

或者使用try/except并为过滤器中的断点异常返回1(带有空处理程序的exceptionexecutehandler).