Winapi windows10上的outputdebugstring异常

Winapi windows10上的outputdebugstring异常,winapi,windows-10,Winapi,Windows 10,我将计算机更新到Windows10 我想它会导致OutputDebugStringcallstack中出现异常 当我调用OutputDebugString时,调用堆栈如下所示 ntdll.dll!_WerpWaitForCrashReporting@16() ntdll.dll!_RtlReportExceptionHelper@16() ntdll.dll!_RtlReportException@12() ntdll.dll!_RtlpReportInvalidExceptionChain@8

我将计算机更新到Windows10

我想它会导致
OutputDebugString
callstack中出现异常

当我调用
OutputDebugString
时,调用堆栈如下所示

ntdll.dll!_WerpWaitForCrashReporting@16()
ntdll.dll!_RtlReportExceptionHelper@16()
ntdll.dll!_RtlReportException@12()
ntdll.dll!_RtlpReportInvalidExceptionChain@8()
ntdll.dll!RtlDispatchException()
ntdll.dll!_KiUserExceptionDispatcher@8()
KernelBase.dll!_RaiseException@16()
KernelBase.dll!OutputDebugStringW()
看起来像是windows错误报告进程

为什么会发生这种情况

在Windows10中,
OutputDebugString
是否已弃用

谢谢

为什么会发生这种情况

您的代码中某处有错误。可能是堆损坏,或者传递给函数的参数无效。对于实例可能是字符串未以null结尾,或者传递的内存已被释放

如果我不得不打赌的话,我认为这一最终解释是最有可能的

在Windows10中,
OutputDebugString
是否已弃用

不。虽然您可能倾向于认为问题与操作系统升级有关,但这是您的代码的问题。升级正好突出了代码的问题,这个问题一直存在,但现在才出现在清单上

OutputDebugString通过生成异常来工作。调试器将其捕获为调试事件(“第一次机会”),然后提取字符串参数并显示它


显示的堆栈中的重要部分是
\u RtlpReportInvalidExceptionChain
。这意味着您的try/catch链不知何故已损坏。可能是异常处理模型(/EHsc)或其他方面不匹配。

即使它已被弃用,也不意味着它会在调用该函数时使您的计算机崩溃。因此,IMHO,问题出在其他地方。要检查API是否已弃用,请访问msdn以获取相同的信息。在这种情况下,你可以去-谢谢你的建议。我将尝试查找原因。call
RtlpReportInvalidExceptionChain
表示您的SEH异常链已损坏