暂时禁用第一次机会异常
Posted
技术标签:
【中文标题】暂时禁用第一次机会异常【英文标题】:Temporally disable first-chance exceptions 【发布时间】:2012-03-22 12:38:29 【问题描述】:有没有办法在 Visual C++ 中暂时禁用首次机会异常?
类似这样的:
void someFunc()
disableFirstChanceExceptions();
try
// some code
catch (std::exception& e)
// some code
catch (...)
// some code
enableFirstChanceExceptions();
我知道什么是第一机会例外以及如何使用它们。
问题是,我正在分发一个 DLL,其中使用了异常。 不幸的是,如果客户在他的程序中使用调试器,他会注意到我的实习生异常。 不是我想隐藏它们,更多的是我想摆脱这些支持问题。
【问题讨论】:
告诉客户忽略您内部代码中的异常。 这就是我目前正在做的事情,但我不想再花时间在这上面了。 对于以前没有遇到过该术语的使用者的好处,您应该解释什么是first-chance-exceptions,或提供链接。 【参考方案1】: 您的代码引发异常。 您的客户坚持对您的代码运行调试器,并明确配置它以在第一次出现异常时中断。你基本上有两种选择:
不要抛出异常,或者 忽略您的客户是否愚蠢。您的代码在内部执行的操作与他们无关只要按预期工作。我建议后者。如果他们在第三方代码中遇到异常被抛出和捕获的问题,他们会发现自己无法使用很多库。他们需要长大并开始表现得好像他们知道自己在做什么。
【讨论】:
【参考方案2】:第一次机会异常不是可以在你的代码中打开和关闭的东西(只说windows、vs、c++链,不熟悉其他平台)。这是内置在运行时系统中的构造,使调试成为可能。调试器可以配置为忽略一些或所有第一次机会异常。您可以使用 ctrl + alt + e 调出 VS 调试器的异常处理行为菜单。这将允许客户端调试过滤调试器捕获的内容。
【讨论】:
我知道这件事。我也知道我将调试器配置为忽略它们,但我无法配置客户的调试器。我希望存在像 msdn.microsoft.com/en-us/library/xcb2z8hs%28v=vs.100%29.aspx 这样的东西,它也只是一个调试器功能。 如果您的客户在使用调试器时知道如何使用调试器,我认为您没有任何方法可以取胜。 听起来您的客户正在看到您对异常的内部使用,即使您的库正确处理了异常。正如我所说,第一次机会异常不是你可以关闭的——它是调试器的一个特性。指导您的客户了解如何禁用特定的首次机会例外。以上是关于暂时禁用第一次机会异常的主要内容,如果未能解决你的问题,请参考以下文章
WebClient.DownloadString 提供第一次机会异常