禁止在MSVC中调试SetThreadName异常的输出

时间:2015-06-03 18:34:57

标签: c++ multithreading exception visual-studio-2013 visual-studio-debugging

我使用建议的方法通过SetThreadName设置线程的名称。它工作正常,我看到线程视图工具窗口中的名称发生了变化。但是,我经常会在调试输出窗口中打印出一条异常消息。由于我有几个线程,我可能会收到其中的几条消息,但有时候我没有。示例消息:

First-chance exception at 0x75419558 (KernelBase.dll) in MyProgram.exe : 0x406D1388 (parameters: 0x00001000, 0x00E1EB70, 0x00000A40, 0x00000000).

虽然异常会被__except块处理/忽略,但一切都没有问题,但它让我感到担忧。有没有解释为什么会发生这种情况,而且只是间歇性地发生?是否有其他方法可以避免消息,或者是否有某种方法可以将异常消息的输出抑制到调试输出?

注意:这似乎发生在所有版本的Visual Studio中 - 我已经测试过VC2010-2015RC。

1 个答案:

答案 0 :(得分:0)

What is a first chance exception?

如果附加了调试器,则首先将任何抛出的异常提供给调试器。这就是为什么即使您使用__except(EXCEPTION_EXECUTE_HANDLER)子句处理异常,它也会显示异常。调试器获得第一次机会来处理它。在这种情况下,似乎只是打印它接收它然后正常传递它。

要停用这些消息,您可以右键单击输出菜单并取消选中Exception Messages