这些天在根据游戏后台的崩溃信息对有游戏进行调试,刚开始调试的时候方向还不是很明确,多调试几次后也摸索出来了一些规律,这里简单地对网上的一些资料做个总结,后面也会持续更新。

SIGBUS和SIGSEGV也许是我们在平时遇到的次数最多的两个 内存错误 信号。

一、SIGSEGV

Official Description:
SIGSEGV --- Segment Fault. The possible case of your encountering this error are:
1.buffer overflow --- usually caused by a pointer reference out of range.
2.stack overflow --- please keep in mind that the default stack size is 8192K.
3.illegal file access --- file operations are forbidden on our judge system.

SIGSEGV(Segment fault):指针对应的地址是无效地址,没有物理内存对应该地址。

二、SIGBUS

SIGBUS(Bus error):指针对应的地址是有效地址,但总线不能正常使用该指针。通常是未对齐的数据访问导致的。
SIGBUS的缺省行为是终止当前进程并产生core dump。
可能导致的原因:
(1)硬件故障;
(2)Linux平台执行malloc(),如果没有足够的RAM,Linux不是让malloc()失败返回,而是向当前进程分发SIGBUS信号;
(3)某些架构上访问数据时有对齐的要求,比如只能从4字节边界上读取一个4字节的数据类型。IA-32架构没有硬性对齐要求,尽管未对齐的访问降低执行效率。另外一些架构,比如SPARC、m68k,要求对齐访问,否则向当前进程分发SIGBUG信号。

测试表明,在x86/Linux、x86/Solaris、SPARC/Solaris平台上,越过栈底的地址访
问导致SIGSEGV信号。在x86/FreeBSD、x86/NetBSD、x86/OpenBSD平台上,越过栈底
的地址访问导致SIGBUS信号,而不是SIGSEGV信号。

三、SIGILL

SIGILL 信号是cpu在发现非法指令之后发出一个异常,然后由负责处理该异常的内核的ISR对含有这个非法指令的进程发出的。程序收到这个信号,一般就是报 告 illegal instruction 错误信息。

可能导致的原因:
(1)版本不一致, 比如依赖的共享库接口变了,但你仍在使用老版本的库,问题的现象通常是诡异,而且你觉得不可能挂的地方,而通常是挂在你对依赖库的调用之处。简单点说就是头文件更新了,但库文件还没有更新。

--------------------------------------------------------------------------
使用映射可能涉及到如下信号

SIGSEGV

试图对只读映射区域进行写操作

SIGBUS

试图访问一块无文件内容对应的内存区域,比如超过文件尾的内存区域,或者以
    前有文件内容对应,现在为另一进程截断过的内存区域。
--------------------------------------------------------------------------

Signal Description
SIGABRT 由调用abort函数产生,进程非正常退出
SIGALRM 用alarm函数设置的timer超时或setitimer函数设置的interval timer超时
SIGBUS 某种特定的硬件异常,通常由内存访问引起
SIGCANCEL 由Solaris Thread Library内部使用,通常不会使用
SIGCHLD 进程Terminate或Stop的时候,SIGCHLD会发送给它的父进程。缺省情况下该Signal会被忽略
SIGCONT 当被stop的进程恢复运行的时候,自动发送
SIGEMT 和实现相关的硬件异常
SIGFPE 数学相关的异常,如被0除,浮点溢出,等等
SIGFREEZE Solaris专用,Hiberate或者Suspended时候发送
SIGHUP 发送给具有Terminal的Controlling Process,当terminal被disconnect时候发送
SIGILL 非法指令异常
SIGINFO BSD signal。由Status Key产生,通常是CTRL+T。发送给所有Foreground Group的进程
SIGINT 由Interrupt Key产生,通常是CTRL+C或者DELETE。发送给所有ForeGround Group的进程
SIGIO 异步IO事件
SIGIOT 实现相关的硬件异常,一般对应SIGABRT
SIGKILL 无法处理和忽略。中止某个进程
SIGLWP 由Solaris Thread Libray内部使用
SIGPIPE 在reader中止之后写Pipe的时候发送
SIGPOLL 当某个事件发送给Pollable Device的时候发送
SIGPROF Setitimer指定的Profiling Interval Timer所产生
SIGPWR 和系统相关。和UPS相关。
SIGQUIT 输入Quit Key的时候(CTRL+\)发送给所有Foreground Group的进程
SIGSEGV 非法内存访问
SIGSTKFLT Linux专用,数学协处理器的栈异常
SIGSTOP 中止进程。无法处理和忽略。
SIGSYS 非法系统调用
SIGTERM 请求中止进程,kill命令缺省发送
SIGTHAW Solaris专用,从Suspend恢复时候发送
SIGTRAP 实现相关的硬件异常。一般是调试异常
SIGTSTP Suspend Key,一般是Ctrl+Z。发送给所有Foreground Group的进程
SIGTTIN 当Background Group的进程尝试读取Terminal的时候发送
SIGTTOU 当Background Group的进程尝试写Terminal的时候发送
SIGURG 当out-of-band data接收的时候可能发送
SIGUSR1 用户自定义signal 1
SIGUSR2 用户自定义signal 2
SIGVTALRM setitimer函数设置的Virtual Interval Timer超时的时候
SIGWAITING Solaris Thread Library内部实现专用
SIGWINCH 当Terminal的窗口大小改变的时候,发送给Foreground Group的所有进程
SIGXCPU 当CPU时间限制超时的时候
SIGXFSZ 进程超过文件大小限制
SIGXRES Solaris专用,进程超过资源限制的时候发送 

Crash Error Debugging相关推荐

  1. 一个suse11 sp1的crash工具版本问题

    这几年排查的各种类型的crash也比较多了,各种类型的也算见过,但是排查这个crash,走了不该走的弯路,事后显得很low,为了防止自己犯类似错误,也同时提醒后人,记录之. 内核是suse11,sp1 ...

  2. Android LiveData crash: Cannot add the same observer with different lifecycles

    参考 Android lifecycle library: Cannot add the same observer with different lifecycles 项目场景: 最近项目的直播间中 ...

  3. ICE kinematics! - Softimage 2011!

    XSI WIKI上的新特性介绍(纯文本,内容详细) The Area论坛官方发布帖(含视频,文档内容不含细节) 尽管还没有发售,但几项新特性已经足够让人侧目. ICE kinematics就是一个千呼 ...

  4. SQL 错误: ORA-00600: 内部错误代码, 参数: [qcsfbdnp:1], [], [], [], []

    call CREATEZHIBIAOPART2('cy_prop_reason','2014-02-18','PropReason');commit;call CY_ALL_GAOJINSHUCHU( ...

  5. 虚幻引擎 4.14 版发布!

    Share on Facebook Share on Twitter Share on Google+ Share on LinkedIn 此版包含 Epic 的数百项更新,以及 GitHub 虚幻引 ...

  6. 系统诊断概述-如何通过windbg来dump特定process的memory.

    关键字:系统异常system exception  内存dump (信息转储),windbg工具. 1.为什么需要dump 内存     系统经常出现各种各样的问题,这些问题,可能是本身程序设计的时候 ...

  7. lambda函数,函数符_为什么您永远不应该在Lambda函数中使用print()

    lambda函数,函数符 两个Lambda用户的故事 (A Tale of Two Lambda Users) 故事1:业余 (Tale #1: The Amateur) One moment eve ...

  8. aix linux运维,运维老司机分享的八个AIX日常运维经验及案例

    原文来自微信公众号:AIX专家俱乐部 [经验分享]在AIX启动时,打开debug模式 经常遇到aix无法启动,但又不知道pending在哪,因此打开启动过程的debug模式,对于诊断问题有很大的帮帮助 ...

  9. 使用React的static方法实现同构以及同构的常见问题

    代码地址请在github查看,假设有新内容.我会定时更新.也欢迎您star,issue,共同进步 1.我们服务端渲染数据从何而来 1.1 怎样写出同构的组件 服务端生成HTML结构有时候并不完好.有时 ...

最新文章

  1. 判断手机是否弹出键盘,改变了手机页面高度,对应inputStatus的状态改变相关控件的大小和位置
  2. skiplist跳表的 实现
  3. javascript的时间段选择
  4. matplotlib学习记录 四
  5. ElasticSearch入门 附.Net Core例子
  6. 随机森林算法 python_Python实现的随机森林算法与简单总结
  7. java emf 转jpg_java – emf到jpg的转换
  8. linux系统的文件系统tmpfs,linux里tmpfs文件系统
  9. torch.index_select与torch.gather
  10. c#excel导入mysql_(转)C# Excel导入Access数据库的源码
  11. linux 安装 PHP fileinfo 扩展
  12. lnmp、lamp、lnmpa一键安装包(Updated: 2021-01-06)
  13. Android 客户端上开发人人客户端系列教程
  14. lol选英雄显示服务器,lol卡在选人界面怎么回事 lol卡在选英雄界面怎么办
  15. Rasterio入门
  16. 【 第一章:初识 ts】
  17. flutter APP自动更新
  18. 图像(层)正常混合模式详解(上)
  19. 高清视频体验大幅提升,来数数我们应用了哪些新算法
  20. C初阶必写的C语言小游戏—扫雷,一看就会,看完就能写

热门文章

  1. canvas 高斯模糊效果
  2. c语言无符号整型越界,整型输出越界问题
  3. 计算机视觉论文-2021-03-03
  4. 黑马JAVA P44 猜数字游戏
  5. 视达配色教程8 蓝色的性格是什么样的
  6. polished_project 源码分析 知识点总结
  7. 社交软件Soul撤回IPO申请:上市只差临门一脚 腾讯是大股东
  8. php管理员密码,PHPWIND得到管理员密码的方法.
  9. java蓝桥杯练习 拉马车
  10. STM32最新是10个案例及操作