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

标签 winapi windows-vista service crash breakpoints

我正在用 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/

相关文章:

windows-vista - 在 Vista 中关闭 Aero 的不良行为

c - Visual Studio 2010 C 项目 - 作为服务安装

javascript - 通过链式服务传递 header

winapi - 使用 Windbg 获取第 3 方模块的列表?

python - 如何在 python 中获取 Windows 用户的全名?

winapi - 使用 DirectX 渲染 BMP、JPEG 或 PNG 图像?

windows-services - 从依赖于 msi 安装的程序集的 msi 安装程序启动服务

c++ - #ifdef x64 不适用于 Windows 资源文件

c# - 不在焦点时响应键盘? (C#, Vista)

Android:在后台运行的应用耗尽电池