我正在用 C++ 编写一个 Win32 服务。我有一个调用 DebugBreak() 的自定义 Assert 宏(除其他外)。当我在 Vista 下运行我的服务时,服务在到达 DebugBreak() 调用(一个 int 3 汇编器操作码)时崩溃,显示 vista 崩溃对话框。错误代码为 80000003(硬编码断点)。
通常我希望我的服务在没有附加调试器时运行在 DebugBreak() 调用上而不做任何事情。为什么会崩溃?是否有可能更改设置以使其继续运行?
最佳答案
它正在崩溃,因为它是一个断点异常。 为了安全起见,您需要检查是否附加了调试器:
if(::IsDebuggerPresent()) ::DebugBreak();
或使用 try/except 并从过滤器中为您的断点异常返回 1(带有空处理程序的异常执行处理程序)。
关于winapi - 为什么我的服务在 Vista 上的 DebugBreak() 处崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/472476/