我正在使用建议的方式通过 SetThreadName 设置线程的名称.它有效,我看到线程 View 工具窗口中的名称发生了变化。但是,我经常在调试输出窗口中打印出一条异常消息。由于我有多个线程,我可能会收到其中的几条消息,但有时我什么也没有收到。示例消息:
First-chance exception at 0x75419558 (KernelBase.dll) in MyProgram.exe : 0x406D1388 (parameters: 0x00001000, 0x00E1EB70, 0x00000A40, 0x00000000).
尽管 __except
block 应该处理/忽略异常,并且一切继续没有问题,但它让我担心。是否有解释为什么会发生这种情况,并且只会间歇性发生?是否有其他方法可以避免出现该消息,或者是否有某种方法可以抑制将异常消息输出到调试输出?
注意:这似乎发生在所有版本的 Visual Studio 中 - 我已经测试过 VC2010-2015RC。
最佳答案
What is a first chance exception?
当你附加调试器时,抛出的任何异常都会首先提供给调试器。这就是为什么它显示异常,即使您使用 __except(EXCEPTION_EXECUTE_HANDLER)
子句处理异常。调试器得到第一次机会来处理它。在这种情况下,它似乎只是打印它收到它然后正常传递它。
要禁用这些消息,您可以右键单击输出菜单并取消选中 Exception Messages
。
关于c++ - 抑制 MSVC 中 SetThreadName 异常的调试输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30627988/