`
isiqi
  • 浏览: 16497326 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

set_unexpected

阅读更多

● 函数的声明
unexpected_handler set_unexpected (unexpected_handler f) throw();
设置新的,返回旧的

● 说明
所谓的unexpected_handler,指的是函数。
如果某个函数出现异常,而该异常未被列到异常列表,则unexpected_handler被系统自动调用。

该函数可以调用 terminate 或者 cstdlib::exit 或者 cstdlib::abort 中止程序的执行。
也可以把异常再次抛出,或者抛出别的异常。
如果抛出的异常不在异常列表,而且列表里有 bad_exception,那么系统会代替它抛出 bad_exception。
如果列表里没有 bad_exception,那么系统自动调用 terminate 终止程序的运行。

默认的 unexpected handler 调用 terminate。

● demo

在VC2008上运行这个程序时,没有如期的运行myunexpected函数。
正确输出应为:

unexpected called
caught int

据说GCC是正常的。

分享到:
评论

相关推荐

    运动会分数统计 C++

    _CRTIMP unexpected_function __cdecl set_unexpected(unexpected_function); #ifndef _MAC _CRTIMP _se_translator_function __cdecl _set_se_translator(_se_translator_function); #endif ``` 以上函数允许用户...

    C++异常处理

    C++还提供了set_unexpected函数,允许程序员定义自己的unexpected函数,以及set_terminate函数,用于设置terminate函数。这两个函数都是用来处理异常处理机制本身出现错误时的策略。 C++标准库提供了iostream类中的...

    Qt程序crash信息的捕捉与跟踪Demo

    `std::set_unexpected()`用于设置未捕获的异常处理器。 此外,为了能够从堆栈信息中解析出具体的调用路径,我们需要利用Qt的`qDebug()`或第三方库(如`backtrace()`或`addr2line`)来获取更详细的堆栈跟踪。这可以...

    守护进程,程序异常死机后自动重启

    在C++中,这通常涉及使用`set_unexpected`和`set_terminate`函数设置异常处理函数。当未处理的异常发生时,这些函数会被调用,我们可以在这时记录错误信息,并尝试重启程序。然而,由于题目指出代码没有使用心跳监控...

    程序崩溃自动重启以及将未捕获到的异常写退出栈

    在C++中,可以使用`set_unexpected`和`set_terminate`函数注册自定义的异常处理函数;在Java中,可以使用`Thread.setDefaultUncaughtExceptionHandler`方法。这些处理函数不仅要记录堆栈信息,还可能包含其他有用的...

    c++ 自动dump AutoDump

    3. **捕获异常**:使用`set_unexpected`和`set_terminate`函数,设置在未处理的异常或`terminate`调用时执行的函数。这些函数将在程序异常或终止时被调用,是触发dump生成的关键。 4. **编写dump生成函数**:这个...

    C++11-14教程.pdf

    此外,C++98标准中的异常说明、unexpected_handler和set_unexpected()等特性被弃用,应采用更现代的异常处理方法。还有,C语言风格的类型转换(例如使用C语言中的强制类型转换)也被弃用,推荐使用static_cast、...

    c++教程-第 1 章 迈向现代 C.docx

    - **C++98 异常说明、`unexpected_handler`、`set_unexpected()`** 等特性被弃用: - 替代方案: 使用 `noexcept`。 - **`auto_ptr`** 被弃用: - 替代方案: 使用 `unique_ptr`。 - **`register` 关键字** 被弃用: -...

    iOS , mac signal exception catch

    - 对于C++代码,可以使用`set_unexpected()`和`terminate_handler`来处理未预期的函数和程序终止。 - 使用`NSSetUncaughtExceptionHandler`可以设置一个全局的Objective-C异常处理器,但这仍然无法捕获系统信号。 ...

    c++教材 李文斌编著

    - **set_unexpected()和set_terminate()**:解释了这两个函数的作用和使用场景。 - **用auto_ptr类实现异常安全**:讲解了智能指针auto_ptr在异常处理中的应用,以及如何确保资源的安全释放。 ##### 第十二章 输入...

    php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACEeval()d code error

    在PHP编程中,"Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE eval()'d code" 是一个常见的解析错误,它表明你的代码在编译阶段遇到了语法问题。这个错误通常出现在尝试执行eval()函数时,由于...

    CentOS7运行.sh脚本提示syntax error: unexpected end of file的解决方法

    CentOS 7运行.sh脚本提示syntax error: unexpected end of file。脚本是通过本地电脑的notepad++编辑之后用ftp上传到CentOS 7服务器上的。 错误原因: shell脚本在本地电脑编辑的,格式是dos(可以用vi编辑该shell...

    一个win32下的ARM开源编译器

    There are a few restrictions how the ARM instruction set is implemented. The changes are minor and mostly have a minor impact. For the most part the basic instruction outline is the same. Where ...

    stm I2C中断程序

    /* In order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction. */ struct SCB_T *system=&system_process; unsigned char i,i2c_sr1,...

    dec-to-bin-octal-hex convertor

    里面是一个自己写的十进制到小于64位的二进制、八进制、十六进制的转换器。没有做多余的界面处理。在C提示符下运行。源数文件头按以下格式书写:目标数据长度 小数部分长度 转换方式(0 2bin 1 2oct 2 2hex) 前缀(0 ...

    karma-unexpected:出乎意料的业力

    因果报应 的 安装 从 npm 安装插件: ... config.set({ # frameworks to load frameworks: [..., 'unexpected'], # ... }); }; 用法 意外将按expect : it('should work', function() { expect

    【红对勾 讲与练】(新课标)2015年高三英语二轮专题复习 专题十一 定语从句(含解析)

    4. We'll reach the sales targets in a month ________ we set at the beginning of the year. 在这个句子中,关系代词that或which引导定语从句,修饰the sales targets。 5. especially at work ________ a good ...

Global site tag (gtag.js) - Google Analytics