Visual Studio 仅对代码的特定部分禁用输出窗口中的异常消息

zf9nrax1  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(121)

在Visual Studio(MSVC)中,有一个选项可以完全禁用输出窗口(Tools->Options->Debugging->Output Window->General Output Settings->Exception Messages=Off)中的异常消息。有没有一种方法(可能使用#pragma?)可以针对特定代码段禁用此类输出?
使用案例:std::stoi()对不能转换为数字的非数字输入抛出异常。然后应用程序代码会正确捕获并处理此异常。由于此异常在正常程序运行期间发生多次,并且我已经捕获并处理了此异常,因此我不希望有关此异常的消息因特定代码行而引起,从而污染调试器输出窗口,我发现调试输出很有用,但是一旦我正确处理了一个特定的异常,我不希望它在调试器输出窗口中保持混乱。
基本上,我想有以下几点:

  1. ...
  2. //I want exception messages from here
  3. ...
  4. try
  5. {
  6. //I don't want exception messages from here because:
  7. //a) I have a ton of expected bad inputs during normal program run and
  8. //b) I have handled these exceptions
  9. #pragma some_magic_pragma_here_to_disable_exception_messages
  10. auto result = std::stoi(str,pos,base);
  11. #pragma some_magic_pragma_here_to_reenable_exception_messages
  12. }
  13. catch (std::invalid_argument &)
  14. {
  15. //Do something here
  16. }
  17. catch (std::out_of_range &)
  18. {
  19. //Do something here
  20. }
  21. catch (...)
  22. {
  23. //Do something here
  24. }
  25. ...
  26. //I want exception messages from here again
  27. ...

字符串
我看了看list of MSVC pragmas,但找不到任何与我所需要的远程相似的东西。

vqlkdk9b

vqlkdk9b1#

是否有一种方法(可能使用#pragma?)仅对特定代码段禁用此类输出?
**答案是否定的。**VS并没有设计这样的东西。

你提到的技术是另一回事,预处理器指令是对预处理器的指令,预处理器是编译器的一部分,在编译之前处理你的代码。它们用于包含文件,定义宏,有条件地编译代码,以及执行其他编译时操作。
你可以看看这个:
Preprocessor
你分享的链接实际上是在这个概念下。
调试器是一种在运行时发现和修复错误的工具。2它独立于预处理器和编译器运行。
它仅限于通过用户界面改变调试器行为的某些设置,调试器的行为不受预处理器指令的控制。

相关问题