问题标签 [terminate-handler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1716 浏览

c++ - set_terminate 函数对我不起作用

我从cplusplus.com获取以下代码:

由于代码中有未处理的异常,它需要调用 myterminate() 函数,该函数设置为终止处理程序并应该覆盖默认的终止处理程序。

程序崩溃但没有调用 myterminate()。我正在使用 Visual C++ 2008 速成版。

代码有什么问题?

0 投票
2 回答
273 浏览

python - 捕获错误并退出

在python中,有没有办法在测试条件后退出一个类,而不退出python?

说我有课

try/except` 不起作用,因为程序的其余部分在失败后不会终止。我基本上是在尝试捕获错误,并在显示错误时执行 python 的操作,但我不知道该怎么做

0 投票
1 回答
558 浏览

c++ - 用户提供的 terminate() 函数必须是线程安全的吗?

http://en.cppreference.com/w/cpp/error/terminate中所述,调用终止的原因有很多。我可以想象其中一些原因几乎同时发生在两个线程中的情况。

Q1设置的终止函数std::set_terminate是否可以同时调用两次或多次,同时我的意思是第二次调用在第一次结束之前开始。

Q2如果 Q1==YES,那么如果第一次终止结束会发生什么。我猜如果它以 std::abort 结束,那么程序结束,但是如果用户提供的 terminate 没有中止程序会发生什么?

Q3调用的终止函数是std::set_terminate在导致终止调用的线程的上下文中设置的吗?

0 投票
2 回答
171 浏览

c# - 当软件以正常关闭 (X) 结束或抛出意外错误时如何执行函数

当正在运行的应用程序通过正常关闭方式(右上角 X)终止或发生意外错误并且软件终止时,我想执行一个函数。

我如何在 c# 4.5 WPF 应用程序中做到这一点

谢谢

0 投票
1 回答
2627 浏览

c++ - 终止处理程序可以抛出异常吗?

以下程序的定义行为是什么(如果有)?

使用 gcc 和 clang 我得到以下输出:

示例在前几条评论后编辑。

(我不知道为什么我同时拥有throw;std::terminate();。我不想改变这个例子,所以只是假装这两个中的一个在那里。)

0 投票
3 回答
749 浏览

c++ - 如何捕获因无效内存块被破坏而导致的错误

下面的代码使得析构函数被调用两次。

我如何在生产中发现这样的错误?

在发布版本中,程序崩溃。在 Debug 上构建它,我的系统上是: 在此处输入图像描述

0 投票
1 回答
767 浏览

c++ - 终止处理程序在哪个线程中调用?

在哪个线程中称为终止处理程序:

  1. 当函数内部抛出异常时noexcept

  2. 当用户调用std::terminate()?

  3. 在启动或销毁thread

它是否在标准中定义,我可以访问thread_local对象吗?

0 投票
1 回答
1806 浏览

c++ - 终止所有线程或当前正在运行的线程,使进程在 C++ 中保持活动状态

我想在收到停止消息时终止进程的所有当前正在运行的线程。但我希望进程继续运行以接受新请求。我使用 c++ std::thread 而不是 pthreads

0 投票
1 回答
402 浏览

c++ - 从终止处理程序访问所有未捕获的异常

我目前正在遵循 C++ 核心指南,将我的代码中的所有析构函数设置为noexcept. 我的一些析构函数可能会抛出异常——在这种情况下,我希望程序崩溃并为我提供导致崩溃的详细信息。noexcept在析构函数上设置说明符将调用std::terminate()它依次调用默认值terminate_handler。默认terminate_handler将打印在析构函数中触发的异常。这在抛出另一个异常时未调用抛出析构函数的情况下非常有用。在那种情况下,我想terminate_handler打印两个异常,这样我就可以知道是什么触发了错误处理路径。

问题是我似乎无法在标准库中找到获取未捕获异常的方法。有一个std::current_exception()函数可以获取正在处理的异常并且std::uncaught_exceptions()只获取未捕获异常的数量。我想std::exception_ptr对未捕获的异常进行处理。那可能吗?

0 投票
1 回答
955 浏览

c++11 - 关于 set_terminate 的使用问题

我有下面的例子。(我的实际项目是一个多线程项目,我为所有项目设置了终止处理程序。)我有几个问题。

  1. 我的终止处理程序没有做任何花哨的事情。它只是说发生了错误并退出。我读到添加处理程序是一种好习惯。为什么会这样,在这种情况下我真的需要吗?

  2. 如果我没有处理程序,我会得到抛出的异常类型。terminate called after throwing an instance of 'char const*'但是当我使用处理程序时,我无法得到它。即使我使用 current_exception,我也无法获得异常的类型。(这里显然是 char*,但在我的情况下,它可能是任何东西,所以我无法正确捕捉。即使我使用 catch{...},消息和类型也会丢失)。反正有没有得到消息。如果没有消息,至少我可以获得抛出的异常类型吗?