客户端异常捕获,是一件必然的事情,特别是在开发的时候就更需要这些有利于找出问题原因的捷径。区别于服务器的是,客户端基本上是以界面为主,你很难在正常运行程序的情况下进行一些输出的监视,如一些日志的记录。开发中我们可以调用一些别的界面来监控输出,但发布的版本则不能。日志的记录在客户端也是必不可少的,但是客户端记录的日志一般都是必要的日志,毕竟客户端最后是放在别人的机器上,我们不能像服务器那边可以随意使用资源。如果客户端的日志过大,则会造成用户的不满,这种不满就决定了你应用的可行性,直观的说你的应用不能被用户所接受。所以在客户端产生异常奔溃的时候,往往会弹出一个提示框,然后将本次奔溃的日志发送到相应的异常资源收集服务器上,这样方便开发人员进行跟踪调试。

CODE

模块exception文件base.h

/**
* PAP Engine ( -- )
* $Id base.h
* @link -- for the canonical source repository
* @copyright Copyright (c) 2013-2014 viticm( viticm@126.com )
* @license
* @user viticm<viticm@126.com/viticm.ti@gmail.com>
* @date 2014-3-17 10:57:14
* @uses vengine exception base functions
*/
#ifndef VENGINE_EXCEPTION_BASE_H_
#define VENGINE_EXCEPTION_BASE_H_ #include "vengine/config.h" //ref from http://www.codeproject.com/tools/minidump.asp
//generate stack frame pointers for all functions - same as /Oy- in the project
#pragma optimize("y", off) namespace vengine_exception { namespace base { VENGINE_API void process(PEXCEPTION_POINTERS exception, bool run_crashreport);
VENGINE_API void showstring(const char* format, ...);
VENGINE_API void showassert(const char* filename,
uint16_t fileline,
const char* exception);
VENGINE_API int32_t processinner(PEXCEPTION_POINTERS exception,
HWND hparentwnd,
const char* title);
}; //namespace base }; //namespace vengine_exception #define VENGINE_SHOW vengine_exception::base::showstring
#define VENGINE_ASSERT(condition) \
if (!condition) { \
vengine_exception::base::showassert(__FILE__, \
__LINE__, \
#condition); \
} \
// do { \
// } while (0); #endif //VENGINE_EXCEPTION_BASE_H_

模块exception文件errorinfo

/**
* PAP Engine ( -- )
* $Id errorinfo.h
* @link -- for the canonical source repository
* @copyright Copyright (c) 2013-2014 viticm( viticm@126.com )
* @license
* @user viticm<viticm@126.com/viticm.ti@gmail.com>
* @date 2014-3-17 12:02:16
* @uses vengine exception error info functions
*/
#include "vengine/config.h" namespace vengine_exception { #pragma optimize("y", off) namespace errorinfo { bool create_smallinfo_dumpfile(PEXCEPTION_POINTERS exception,
char* filename,
uint16_t lasterror);
bool create_biginfo_dumpfile(PEXCEPTION_POINTERS exception,
char* filename,
uint16_t lasterror);
bool create_dumphelp_file(PEXCEPTION_POINTERS exception,
char* filename);
}; //namespce errorinfo }; //namespace vengine_exception

方法解释

//捕获异常,第一个为异常指针,第二个是指是否运行crashreport(异常收集器)
void process(PEXCEPTION_POINTERS exception, bool run_crashreport);
void showstring(const char* format, ...); //异常抛出
//异常中断,第一个为中断的文件名,第二个为中断的行数,第三个为异常字符串
void showassert(const char* filename, uint16_t fileline, const char* exception);
//异常捕获,区别于第一个方法的是,此异常为内部的,没有异常收集器
int32_t processinner(PEXCEPTION_POINTERS exception,
HWND hparentwnd,
const char* title); errorinfo::create_* //函数,用来创建异常信息文件

SIMPLE

天龙八部的异常收集:

总结

异常收集是客户端比较重要的一部分,因为开发过程中不会出现的问题,不一定在发布的时候出现,也不一定在别的机器上不会出现。异常收集已经成了应用常见的一个模块,几乎所有的应用都会有这样的工具,或前台或后台的收集。下一节要讲的是客户端变量模块。

MMORPG大型游戏设计与开发(客户端架构 part5 of vegine)的更多相关文章

  1. MMORPG大型游戏设计与开发(客户端架构 part8 of vegine)

    脚本模块是游戏设计中争论比较多的话题,那是因为作为脚本本身所带来的利弊.其实这都无关紧要,取舍是人必须学会的一项技能,如果你不会取舍那么就让趋势给你一个满意的答复.自从魔兽世界以及传奇(世界)问世以来 ...

  2. MMORPG大型游戏设计与开发(概述)updated

    1.定义 MMORPG,是英文Massive(或Massively)Multiplayer Online Role-PlayingGame的缩写,即大型多人在线角色扮演游戏. 2.技术与知识 在这系列 ...

  3. MMORPG大型游戏设计与开发(UI SYSTEM SHOW)

    接下来一段时间,这些文件可能不再更新,期间我会学习和掌握一些前端知识.虽然我非常欣赏剑侠网络版叁和九阴真经的画面,但是那是一个庞大的游戏引擎,一般人是无法窥伺的,除非你是天才而且要拥有机器毫无中断的毅 ...

  4. MMORPG大型游戏设计与开发(服务器 游戏场景 核心详述)

    核心这个词来的是多么的高深,可能我们也因为这个字眼望而却步,也就很难去掌握这部分的知识.之所以将核心放在最前面讲解,也可以看出它真的很重要,希望朋友们不会错过这个一直以来让大家不熟悉的知识,同我一起进 ...

  5. MMORPG大型游戏设计与开发(游戏服务器 游戏场景 概述 updated)

    我们在玩游戏的时候,我们进入游戏后第一眼往往都是看到游戏世界中的场景,当然除了个别例外,因为那些游戏将游戏场景隐藏了起来,如文字游戏中的地点一样.既然我们接触了游戏世界的核心,那么作为核心的场景又包括 ...

  6. MMORPG大型游戏设计与开发(客户端架构 part12 of vegine)

    在游戏中的交互过程中输入是一个必不可少的过程,比如登陆的时候需要用户输入用户名与密码,就算是单机游戏很多时候也要求用户输入一个用户名作为存档的依据.网络游戏中没有了输入,只用鼠标来交互是不切实际的,因 ...

  7. MMORPG大型游戏设计与开发(客户端架构 part2 of vgui)

    这一节我将讲解vgui的基础系统部分,也是该库提供给外部使用的一些重要接口.作为UI部分比较重要的部分,该节有着至关重要的部分,如果没有看到上一节内容,请留意下面的连接.我们现在可以猜想一下在客户端U ...

  8. MMORPG大型游戏设计与开发(客户端架构 part16 of vegine)

    由于近来比较忙碌和有些困倦的原因,所以关于这部分的文章没有及时更新,一句话:让朋友们久等了!今天所讲的是客户端vengine(微引擎)中最后一个部分,就像上节所说,这一部分的内容比较多.可能有些朋友看 ...

  9. MMORPG大型游戏设计与开发(客户端架构 part9 of vegine)

    时间在人们的生活中是多么重要的东西,如果打乱了时间,不知道这个时间会成什么样子.在客户端中,自然也有时间模块,因为不同的时间可能会处理不同的事情,特别是在追求高度自由化的同时,时间也成为了一个很重要的 ...

  10. MMORPG大型游戏设计与开发(客户端架构)

    首先为所有等待的朋友说一声歉意,实在让大家等的太久.客户端的设计本来就是一个大的工程,而且工作的关系,也没有太多时间在这方面做研究.不过在私下有空的时间,我还是继续着这方面的研究,很遗憾没有用期望的o ...

随机推荐

  1. 酷酷的jQuery classicAccordion 手风琴

    在线实例 效果一 效果二 效果三 使用方法 手风琴ul li列表 <ul class="accordion">      <li>          < ...

  2. Owl Carousel – 支持触摸的 jQuery 响应式传送带插件

    Owl Carousel 是一个 jQuery 插件,使我们能够迅速地创建响应式传送带滑块.这个插件是触摸友好的,能与几乎任何的 HTML 内容兼容使用.另外,强大的选项设置支持分页/滑动速度,启用/ ...

  3. 频率直方图(hist)

    频率直方图(frequency histogram)亦称频率分布直方图.统计学中表示频率分布的图形.在直角坐标系中,用横轴表示随机变量的取值,横轴上的每个小区间对应一个组的组距,作为小矩形的底边:纵轴 ...

  4. iOS 三方库fmdb 的使用

    使用fmdb 做本地数据的存储非常方便, 1. github 上搜索fmdb 下载压缩包 导入到工程中 (如果你的mac 有cocoapod 也可以直接通过cocoapod 添加) 2. 以下代码是通 ...

  5. GitHub使用指南

    文章地址:http://www.worldhello.net/gotgithub/index.html

  6. Navicat Premium11.0.20破解版快速安装配置(附文件)

    Navicat Premium是当下非常好用的数据库管理软件,但是价格非常昂贵,并且还有某些小bug,感觉3000+的人民币 与软件本身的价值还是不相称.下面是破解安装流程安装过程是在MAC 10.1 ...

  7. 实战Ubuntu Server上配置LXDE+VNC环境

    1.安装x-window 使用apt-get 安装 xorg sudo apt-get install xorg 如果提示以下内容,就说明需要update下源列表,使用sudo apt-get upd ...

  8. Linux Buffer I/O error on device dm-4, logical block

    Linux服务器日志(Oracle Linux Server release 5.7)里面出现了一些"Buffer I/O error on device dm-4, logical blo ...

  9. Linux 虚拟机网络适配器从E1000改为VMXNET3

    我们知道VMware的网络适配器类型有多种,例如E1000.VMXNET.VMXNET 2 (Enhanced).VMXNET3等,就性能而言,一般VMXNET3要优于E1000,下面介绍如果将Lin ...

  10. Javascript之旅——第九站:吐槽function

    说到funciton,也是我对js非常吐槽的一点,封装的让我眼瞎,马蛋的,哥只能大眼睁着去黑盒的使用,简直只有完完全全的听各类图书对 function的道听图说,完全没有做到一点点的眼见为实. 一:f ...