mudos源码分析
错误捕捉相关的代码在simulate.c
void throw_error()
{
if (((current_error_context->save_csp + )->framekind & FRAME_MASK) == FRAME_CATCH) {
LONGJMP(current_error_context->context, );
fatal("Throw_error failed!");
}
error("Throw with no catch.\n");
} static void debug_message_with_location P1(char *, err) {
if (current_object && current_prog) {
debug_message("%sprogram: /%s, object: /%s, file: %s\n",
err,
current_prog->name,
current_object->name,
get_line_number(pc, current_prog));
} else if (current_object) {
debug_message("%sprogram: (none), object: /%s, file: (none)\n",
err,
current_object->name);
} else {
debug_message("%sprogram: (none), object: (none), file: (none)\n",
err);
}
}
void fatal P1V(char *, fmt)
{
static int in_fatal = ;
char msg_buf[];
va_list args;
V_DCL(char *fmt); if (in_fatal) {
debug_message("Fatal error while shutting down. Aborting.\n");
} else {
in_fatal = ;
V_START(args, fmt);
V_VAR(char *, fmt, args);
vsprintf(msg_buf, fmt, args);
va_end(args);
debug_message("******** FATAL ERROR: %s\nMudOS driver attempting to exit gracefully.\n", msg_buf);
if (current_file)
debug_message("(occured during compilation of %s at line %d)\n", current_file, current_line);
if (current_object)
debug_message("(current object was /%s)\n", current_object->name); dump_trace(); #ifdef PACKAGE_MUDLIB_STATS
save_stat_files();
#endif
copy_and_push_string(msg_buf);
if (command_giver) {
push_object(command_giver);
} else {
push_undefined();
}
if (current_object) {
push_object(current_object);
} else {
push_undefined();
}
apply_master_ob(APPLY_CRASH, );
debug_message("crash() in master called successfully. Aborting.\n");
}
/* Make sure we don't trap our abort() */
#ifdef SIGABRT
signal(SIGABRT, SIG_DFL);
#endif
#ifdef SIGILL
signal(SIGILL, SIG_DFL);
#endif
#ifdef SIGIOT
signal(SIGIOT, SIG_DFL);
#endif #if !defined(DEBUG_NON_FATAL) || !defined(MDEBUG)
#ifdef WIN32
exit();
#endif
abort();
#endif
in_fatal = ;
}
mudos源码分析的更多相关文章
- ABP源码分析一:整体项目结构及目录
ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...
- HashMap与TreeMap源码分析
1. 引言 在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...
- nginx源码分析之网络初始化
nginx作为一个高性能的HTTP服务器,网络的处理是其核心,了解网络的初始化有助于加深对nginx网络处理的了解,本文主要通过nginx的源代码来分析其网络初始化. 从配置文件中读取初始化信息 与网 ...
- zookeeper源码分析之五服务端(集群leader)处理请求流程
leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...
- zookeeper源码分析之四服务端(单机)处理请求流程
上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...
- zookeeper源码分析之三客户端发送请求流程
znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...
- java使用websocket,并且获取HttpSession,源码分析
转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...
- ABP源码分析二:ABP中配置的注册和初始化
一般来说,ASP.NET Web应用程序的第一个执行的方法是Global.asax下定义的Start方法.执行这个方法前HttpApplication 实例必须存在,也就是说其构造函数的执行必然是完成 ...
- ABP源码分析三:ABP Module
Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modu ...
随机推荐
- jmeter非GUI的运行命令
jmeter 的参数 参数说明: -h 帮助 -> 打印出有用的信息并退出 -n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter -t 测试文件 -> 要运行的 JM ...
- [ 原创 ] Map之HashMap的使用方法
import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;/ ...
- Selenium(九)测试用例数据分离与从文件导入数据
一.测试用例数据与代码分离 1.从之前的脚本来看,我还是把数据写在了脚本中,这样脚本的通用性很差.全局的数据其实可以从数据库.文本文件.Excel中直接读取. 2.代码和用户数据分离: 3.数据设计- ...
- scroll([[data],fn])
scroll([[data],fn]) 概述 当用户滚动指定的元素时,会发生 scroll 事件. scroll 事件适用于所有可滚动的元素和 window 对象(浏览器窗口).大理石平台支架 参数 ...
- Kafka 消息队列系列之分布式消息队列Kafka
介绍 ApacheKafka®是一个分布式流媒体平台.这到底是什么意思呢?我们认为流媒体平台具有三个关键功能:它可以让你发布和订阅记录流.在这方面,它类似于消息队列或企业消息传递系统.它允许您以容 ...
- percona-toolkit 主从工具 master-slave
复制类 pt-heartbeat 监控mysql复制延迟 pt-slave-delay 设定从落后主的时间 pt-slave-find 查找和打印所有mysql复制层级关系 pt-slav ...
- 026_编写 nginx 启动脚本
#!/bin/bash#本脚本编写完成后,放置在/etc/init.d/目录下,就可以被 Linux 系统自动识别到该脚本#如果本脚本名为/etc/init.d/nginx,则 #service ng ...
- 线程的分离状态 detached joinable
转自 http://blog.chinaunix.net/uid-26983585-id-3315953.html 其实在写上一篇日志的时候,由于我把创建线程的返回值的判断条件写错了,程序每次运行的 ...
- JVM——类加载
一.什么是类加载? JVM将class字节码文件加载到内存中, 并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class 对象,作为方法区类数据的访问入 ...
- 一个XP SP3调用0地址蓝屏BUG
0x00 蓝屏的堆栈 在XP SP3上跑POC之后,一段时间之后会出现蓝屏,蓝屏的堆栈如下,可以看出是ACKData里面CALL了一个0指针导致的蓝屏 0x01 蓝屏原因 1 ETW(Event Tr ...