在 Visual Studio (MSVC) 中,有一个选项可以完全禁用输出窗口中的异常消息 (
Tools->Options->Debugging->Output Window->General Output Settings->Exception Messages=Off
)。有没有办法(也许使用#pragma
?)来禁用此类输出only对于特定的代码段?
用例:
std::stoi()
对于无法转换为数字的非数字输入抛出异常。然后我的应用程序代码会正确捕获并处理此异常。由于此异常在正常程序运行期间多次发生,并且我已捕获并处理了该异常,因此我不希望由特定代码行引起的有关此异常的消息污染调试器输出窗口,从而掩盖一些其他新异常我确实应该注意一下。我发现调试输出很有用,但是一旦我正确处理了特定异常,我就不希望它在调试器输出窗口中保持混乱。
基本上,我想要以下内容:
...
//I want exception messages from here
...
try
{
//I don't want exception messages from here because:
//a) I have a ton of expected bad inputs during normal program run and
//b) I have handled these exceptions
#pragma some_magic_pragma_here_to_disable_exception_messages
auto result = std::stoi(str,pos,base);
#pragma some_magic_pragma_here_to_reenable_exception_messages
}
catch (std::invalid_argument &)
{
//Do something here
}
catch (std::out_of_range &)
{
//Do something here
}
catch (...)
{
//Do something here
}
...
//I want exception messages from here again
...
我查看了MSVC pragmas列表,但找不到任何与我需要的东西有一点相似的东西。
有没有办法(也许使用#pragma?)仅对代码的特定段禁用此类输出?
答案是否定的。 VS 没有设计这样的东西。
您提到的技术是另一回事,预处理器指令是对预处理器的指令,预处理器是编译器在编译之前处理代码的一部分。它们用于包含文件、定义宏、有条件编译代码以及执行其他编译时操作。
你可以看看这个:
您分享的链接其实就是在这个概念下。
调试器是用于在运行时查找和修复错误的工具。它与预处理器和编译器分开运行。
只能通过 UI 更改调试器行为的某些设置,调试器的行为不受预处理器指令控制。