提问人:Regus Pregus 提问时间:11/1/2023 更新时间:11/2/2023 访问量:30
在输出窗口中仅对代码的特定部分禁用异常消息
Disable exception messages in output window only for specific portion of the code
问:
在 Visual Studio (MSVC) 中,有一个选项可以完全禁用输出窗口中的异常消息 ()。有没有办法(也许使用?)仅对代码的特定段禁用此类输出?Tools->Options->Debugging->Output Window->General Output Settings->Exception Messages=Off
#pragma
用例:为无法转换为数字的非数字输入引发异常。然后,我的应用程序代码会正确捕获和处理此异常。由于此异常在正常程序运行期间发生多次,并且我已经捕获并处理了该异常,因此我不希望由特定代码行引起的有关此异常的消息污染调试器输出窗口,从而掩盖了我应该真正注意的其他一些新异常。我发现调试输出很有用,但是一旦我正确处理了特定的异常,我就不希望它在调试器输出窗口中保持混乱。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 编译指示列表,但找不到任何与我需要的内容非常相似的内容。
答:
0赞
Bowman Zhu-MSFT
11/2/2023
#1
有没有办法(也许使用 #pragma?)仅对代码的特定段禁用此类输出?
答案是否定的。VS 没有设计这样的东西。
你提到的技术是另一回事,预处理器指令是对预处理器的指令,预处理器是编译器的一部分,在编译之前处理你的代码。它们用于包含文件、定义宏、有条件地编译代码以及执行其他编译时操作。
你可以看看这个:
您分享的链接实际上属于这个概念。
调试器是用于在运行时查找和修复 bug 的工具。它与预处理器和编译器分开运行。
它仅限于通过 UI 更改调试器行为的某些设置,调试器的行为不通过预处理器指令控制。
评论
#pragma
是给编译器的指令,你需要给调试器的指令。(当异常消息处于打开或关闭状态时,代码的行为没有任何不同,调试器会在每种情况下看到异常,并决定是否记录消息)std::stoi
std::strtol
std::stoi
strtol