代码之家  ›  专栏  ›  技术社区  ›  vividos

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

  •  3
  • vividos  · 技术社区  · 17 年前

    我正在用C++编写Win32服务。我有一个自定义的Assert宏,它调用DebugBreak()(除其他外)。当我在Vista下运行服务时,当到达DebugBreak()调用(INT3汇编程序操作码)时,服务崩溃,显示Vista崩溃对话框。错误代码为8000003(硬编码断点)。

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

    2 回复  |  直到 17 年前
        1
  •  6
  •   Community Mohan Dere    6 年前

    例外 .

    如果(::IsDebuggerPresent())::DebugBreak();

    或者对筛选器中的断点异常使用try/except并返回1(带有空处理程序的exceptionexecutehandler)。

        2
  •  2
  •   ChrisW    17 年前

    MSDN Help for the DebugBreak function 说明:“如果进程未被调试,函数将使用标准异常处理程序的搜索逻辑。在大多数情况下,这会导致调用进程因未处理的断点异常而终止。”

    是否有可能更改设置以使其继续运行?

    您可以尝试添加结构化异常处理程序。

    或者,在调用DebugBreak之前检查一些运行时标志。

    推荐文章