如何在不抛出异常的情况下捕获异常

hu山J

由于某些异常,Function()中存在CRASH,因此不会调用throwX。在这种情况下,如何调用catch块来处理异常?注意:我们无法修改Function()定义中的代码

样例代码:

 cout << "Before try \n";
      try {
          abc->Function();  //Here is CRASH

              throw x;
              cout << "After throw (Never executed) \n";

      }
      catch (...) {
          cout << "Exception Caught \n";
      }

      cout << "After catch (Will be executed) \n";

那么有人可以帮我吗?

扬·胡德克(Jan Hudec)

“ CRASH”也不例外。这是未定义的行为绝对可能发生任何事情。您很幸运,系统检测到它。它可能已经格式化了您的磁盘或从您的鼻子中召唤出了守护程序。取而代之的是,系统仅关闭该过程以防止进一步损坏。

该系统可能甚至会这么好心让你定义做什么,而不是关闭进程。定义它的方式是系统特定的。在Unix中,您需要安装信号处理程序高级方式),在Windows中,您可以使用结构异常

但是问题是,如果函数崩溃了,就无法判断出该进程将进程的内存留了多少乱七八糟。您确实必须修复崩溃。崩溃始终是一个错误。

该函数内部发生崩溃的事实并不自动意味着该函数中存在错误。我见过的大多数崩溃都发生在标准库函数中,但它们不是标准库中的错误。它们是由于不正确地使用这些功能,或者有时是由于错误地使用了程序中早先的其他功能引起的。因为当您调用Undefined Behavior时,无法确定何时会导致崩溃。特别是在某些不相关的代码想要使用被覆盖的变量时,缓冲区溢出和写入未初始化的指针最终最终会导致崩溃

也就是说,如果该错误确实存在于该函数中,并且您无法对其进行修改,则必须找一个可以或找到效果更好的替代方法的人。因为否则程序将无法正常运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在异常情况下重启循环

如何在没有堆栈跟踪的情况下创建/抛出异常?

在不丢失堆栈跟踪的情况下重新抛出Java中的异常

如何在不中断for循环的情况下引发异常?

如何在不丢失C#中的堆栈跟踪的情况下抛出InnerException?

在异常情况下抛出AccessViolationException

Python:如何在没有“当前正在处理”异常的情况下打印异常对象的stacktrace?

如何在不获取“找不到合适的写入器异常”的情况下将异步数据写入远程端点?

如何在不中断python脚本执行的情况下捕获文件中的异常?

F#TaskBuilder:如何在不返回伪值以符合编译器约束的情况下引发异常?

如何捕获重新抛出的异常?

如何在不停止/退出程序的情况下捕获并打印完整的异常回溯?

GSON如何在不抛出空指针异常的情况下测试键/值对

在广泛异常的情况下,不会引发或捕获KeyboardInterrupt

Ruby线程:如何在不调用.join的情况下捕获异常?

如何在不将异常标记为已处理的情况下重新路由异常

仅在没有抛出异常的情况下返回

C#如何使用等待在不阻止UI的情况下捕获任务中的异常

如何在不获取空指针异常的情况下从活动片段中获取适配器?

如何在不抛出异常并防止编译的情况下显示API中未实现的方法

在不排序的情况下删除VIM异常情况下的连续重复行

如何在不结束 SQL Server 存储过程执行的情况下在内部事务中抛出异常?

如何在不违反 SonarQube 的情况下抛出已检查的异常?

如何捕获 DataReceivedEventHandler 抛出的异常?

PHPSTAN:捕获异常而不抛出异常

如何在任务中捕获任务中抛出的异常

我的解决方案在极端情况下抛出异常?

如何在没有 UnhandledPromiseRejectionWarning 的情况下从 Promise 向调用者抛出异常

如何在不遍历行的情况下丢弃 Pandas 数据框中的异常值?