setjmp与longjmp 后缀jmp指的就是jump,关看名字就能猜到这哥俩是干啥的了。使用他们俩就可以让程序控制流转移,进而实现对异常的处理。 异常处理的结构可以划分为以下三个阶段: 准备阶段:在内核栈保存通用寄存器内容 处理阶段:保存硬件出错码和异常类型号,然后向当前进程发送信号 恢复阶段: ...
分类:
编程语言 时间:
2020-06-12 00:51:46
阅读次数:
71
本机环境:win10系统 64位 vs2017 最近码代码时偶然发现了bits/stdc++.h这个头文件(万能头文件),基本上所有的代码只要用了这个头文件就不再写其他头文件了。 看到它就仿佛开启了新世界(也有缺点,就是导致编译速度变慢,不过一般可以忽略不计)。【如果安装了MinGW的直接在文件夹里 ...
分类:
编程语言 时间:
2020-02-04 22:03:37
阅读次数:
535
1、setjmp setjmp的工作原理: 调用这个函数的时候,它会保存执行现场,并返回0;之后调用longjmp,可恢复到setjmp保存的现场,setjmp再次返回,不过这次该函数返回非0 输出结果: 通过setjmp和longjmp捕获异常 参考链接: 宋宝华:让Linux的段错误(segme ...
分类:
系统相关 时间:
2020-01-12 22:28:27
阅读次数:
125
最近,项目在越南版删档测试的时候,发生了罕见的coredump,简单记一点排查日志 目前的敏感词过滤是在C层做判定的,先后经过几个项目考验,模块算是比较稳定了。越南版有个需求,需要将敏感词里的空格去掉。比如敏感词是abc,现在不能说abc了,但是玩家可以输入“a b c”,所以需要过滤掉空格。有同事 ...
分类:
其他好文 时间:
2019-10-27 00:54:47
阅读次数:
116
//程序崩溃规避 //Windows1、设置编译器"Enable C++ Exceptions"为"/EHa",即"Yes with SEH Exceptions", 使得应用程序可以捕获因自身引起的大部分系统异常,少部分不可回避的系统异常依然 会导致程序崩溃退出;2、用"try{}catch(.. ...
分类:
其他好文 时间:
2019-09-20 21:27:10
阅读次数:
105
#include <setjmp.h> #include <stdio.h> jmp_buf j; void raise_exception(void) { printf("exception raised\n"); longjmp(j, 3); /* jump to exception handl ...
分类:
其他好文 时间:
2019-07-17 23:08:44
阅读次数:
157
问 :goto语句只能在函数内使用,那如果想要在函数内部直接跳到函数外怎么办呢? 答:setjmp跳转 介绍: 举例: setjmp第一次调用返回值为0,进入if循环,调用a(),print出第一行,调用b,print第二行,再直接跳转到main函数ret的位置,此时ret置为5,再退出main函数 ...
分类:
其他好文 时间:
2019-04-07 22:03:16
阅读次数:
207
异常处理机制:setjmp()函数与longjmp()函数 C标准库提供两个特殊的函数:setjmp() 及 longjmp(),这两个函数是结构化异常的基础,正是利用这两个函数的特性来实现异常。 所以,异常的处理过程可以描述为这样: 首先设置一个跳转点(setjmp() 函数可以实现这一功能),然 ...
分类:
编程语言 时间:
2019-02-11 10:56:01
阅读次数:
233
单例模式官方定义 确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一的实例。 单例模式的实现机制 实现单例模式的思路是,为了防止客户程序利用构造方法创建多个对象,将构造方法声明为private类型。其原因是,如果构造方法为public类型,则客户程序永远可以通过使用改构造方法创建不同的对象。 ...
分类:
其他好文 时间:
2018-12-16 18:44:24
阅读次数:
139
首先介绍下与非本地跳转的对应的本地跳转,本地跳转指的是类似于goto语句的一系列应用,当设置了标志之后,可以跳到所在函数内部的标号上。然而,本地跳转不能将控制权转移到所在程序的任意地点,不能跨越函数,因此也就有了非本地跳转。 1.非本地跳转是C语言提供的一种用户级的异常控制流的形式,它将控制直接从一 ...
分类:
其他好文 时间:
2018-10-14 11:41:45
阅读次数:
184