linux 段错误错误码为14是什么原因呢?

现在错误码是:
segfault at bfbdd69b ip 00000000bfbdd69b sp 00007fff77a5f368 error 14 in zero (deleted)[7f65bfbdd000+7a2000]

这是什么原因造成的呢,看到了错误码的定义但还是不太明白
/*

  • Page fault error code bits: *
  • bit 0 == 0: no page found 1: protection fault
  • bit 1 == 0: read access 1: write access
  • bit 2 == 0: kernel-mode access 1: user-mode access
  • bit 3 == 1: use of reserved bit detected
  • bit 4 == 1: fault was an instruction fetch
    */
    enum x86_pf_error_code {

    PF_PROT = 1 << 0,
    PF_WRITE = 1 << 1,
    PF_USER = 1 << 2,
    PF_RSVD = 1 << 3,
    PF_INSTR = 1 << 4,
    };
    有大佬能细讲一下吗?

0

1个回答

Trap 为 0xe,即 14,也就是 Page Fault。

而 arch/x86/mm/fault.c 则详细解释了错误码(Error):

/*

  • Page fault error code bits: *
  • bit 0 == 0: no page found 1: protection fault
  • bit 1 == 0: read access 1: write access
  • bit 2 == 0: kernel-mode access 1: user-mode access
  • bit 3 == 1: use of reserved bit detected
  • bit 4 == 1: fault was an instruction fetch
    */
    enum x86_pf_error_code {

    PF_PROT         =               1 << 0,
    PF_WRITE        =               1 << 1,
    PF_USER         =               1 << 2,
    PF_RSVD         =               1 << 3,
    PF_INSTR        =               1 << 4,
    
1
ideal_HC
荒城ideal 这是缺页吗?是什么原因引起的呢
7 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
socket send recv时报段错误的原因和解决方法
  调试服务器时发现使用socket send时会出现偶发的段错误Stopped: Broken pipe(Signal SIGPIPE),网上检索一番得到下面的解释:     在linux下写socket的程序的时候,如果尝试send到一个disconnected socket上,就会让底层抛出一个SIGPIPE信号。 client端通过 pipe 发送信息到server端后,就关闭...
dlopen 相关错误
在使用ndk 编译一个32 位arm 平台的share .so 库, 在c ++ 中打开c++编写的    .so 库, .so 库可以正常的打开使用懒加载, 但是始终找不到函数,提示没有定义的符号链接. 解决方法: extern "C" { } 使用这个将你的.so 的c++ 文件包含,这样在dlopen 时可以正常的调用.
GetLastError错误码大全
GetLastError返回的值通过在api函数中调用SetLastError或SetLastErrorEx设置。函数   并无必要设置上一次错误信息,所以即使一次GetLastError调用返回的是零值,也不能   担保函数已成功执行。只有在函数调用返回一个错误结果时,这个函数指出的错误结果   才是有效的。通常,只有在函数返回一个错误结果,而且已知函数
curl学习(一):段错误
c语言使用curl时出现段错误 问题发现 在使用c语言编程时,按照一般流程使用curl进行http数据的获取,没有错误,但是当开启线程调用该函数频繁时,会出现段错误,并且复现起来较为困难,经后期排查,发现问题出现在了curl上面,处理完该bug后,稍加整理,作为以后提醒 原因 原来libcurl在configure默认配置编译的情况下,它是使用alarm+siglongjmp实现域名解析超时。当多
关于recv的一些错误处理
recv是socket编程中最常用的函数之一,在阻塞状态的recv有时候会返回不同的值,而对于错误值也有相应的错误码,分别对应不同的状态,下面是我针对常见的几种网络状态的简单总结。       首先阻塞接收的recv有时候会返回0,这仅在socket被正常关闭时才会发生。       而当拔掉设备网线的时候,recv并不会发生变化,仍然阻塞,如果在这个拔网线阶段,socket被关掉了,
利用dmesg和addr2line来对(动态库里的)段错误进行调试
问题: 工作中,我们在varnish的基础上,利用vmod机制,实现了一个可以定制策略,且策略可自动加载而不需重新启动引擎的cache(平时,大家对varnish的利用,cache策略都定义在一个vcl配置文件中,每次对策略进行修改,都需要重新启动varnish,从而使得策略生效,且当部署在varnish后面的站点很多时,不方便对每站点的cache策略进行个性化的定制),这里各种策略的控制以及加
mmap函数及其映射失败原因分析
mmap函数 头文件:#include 函数原型:void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset); 参数  start:映射区的开始地址,设置为0时表示由系统决定映射区的起始地址。   length:映射区的长度。   prot:期望的内存保护标志,不能与文
mmap失败追踪
今天在小试mmap函数的时候,本以为会一路畅通没想到执行的时候出现了段错误,调试了一下发现在mmap返回以后访问返回的指针出了问题,代码如下 #define REC_NUM 100 typedef struct{ int val; char str[24]; } RECORD; int function(char *path, ...){ int fd; RECORD *m
Linux中函数返回值错误码对照表(1-133)
Linux中函数返回值错误码对照表(1-133)
Linux下段错误的原因以及调试方法
简而言之,产生段错误就是 访问了错误的内存段 。一、一般来说,段错误就是指访问的内存超出了系统分配给这个程序的内存空间,通常这个值是由gdtr来保存的,1)gdtr是一个48位的寄存器,其中的32位是保 存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别。2)指向的gdt是由以64位为一 个单位的表,在这张表中就保存着程序运行的代码段以
在Linux下编译时出现段错误应该怎么调试
在产生段错误的时候 采用一般的方法调试是很难发现的 一、先看几个段错误实例 (1) 这是因为指针没有开任何内存空间,所以这个0没有地方去,就会产生段错误 (2) 这个比较简单,0地址是受保护的地址,是系统自己要用的。 (3) 这个一看不太好看,这是因为test是一个字符串常量,他是静态内存里面的,但是通过mallow和new产生的指针申请的空间是动态的,当我们把静态内
C/C++段错误问题排查和解决方法
 Segment fault 之所以能够流行于世,是与Glibc库中基本所有的函数都默认型参指针为非空有着密切关系的。   来自:http://oss.lzu.edu.cn/blog/article.php?uid_7/tid_700.html#comment   背景     最近一段时间在linux下用C做一些学习和开发,但是由于经验不足,问题多多。而段错误就是让我非常头痛
linux下socket编程accept出现参数错误
accept函数原型如下: int accept(int sock, struct sockaddr* adress, socklen_t* ); 使用之前需要把adress和len都清零。
Linux mmap学习及遇到的问题解决
Linux mmap的学习 本来以前mmap是很简单的,看下参数用法就ok,结果遇到了一大堆麻烦,google了很多博客,都写得很浅显,就介绍一下参数然后再给了一个简单得不得了的代码,就完了,所以纠结了我差不多一天时间。 mmap怎么用我就不说了,网上很多,在这里就把我犯的错误经验分享出来,先贴一下我用mmap实现拷贝任意文件的代码: #include #include #include
Linux系统函数open和close(04)---open函数错误信息获取
环境:Vmware Workstation;CentOS-6.4-x86_64 查看官方文档,open函数返回值的说明: -1 if an error occurred (in which case, errno is set appro-priately) 如果返回的是-1,那么errno就会被设置。 也就是说,打开文件失败,那么错误信息就会被存放在errno中。 说明:
mmap 错误
int readlen = 5*1024*1024; //int readlen = 1024; int fd = open("/home/bonc/BC000D0300420131210000001.AVL",O_RDONLY); //int fd = open("/home/bonc/ds.ini",O_RDONLY); int len = lseek(fd,0,SEEK_END); //
Linux下运行C++程序产生“段错误”的原因及其解决办法
产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址。 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,它是一个48位的寄存器,其中的32位是保 存由它指向的gdt表,后
socket tcp使用recv接收数据时,返回errno错误代码88
原因:就是recv函数的第一个参数不是可用的,也就是第一个参数不是建立连接时返回的文件描述符. 解决方法:xxx
C语言段错误总结
段错误是很常见的,一般是什么问题引起呢?文档里面有详细总结。
Linux段错误Segfault内核层面分析
最近编写Linux用户态程序,会涉及到一些对内存的操作,因此经常会遇到段错误。 segfault at 99ef469b ip 0000000099ef469b sp 00007ffff238e878 error 14 in zero (deleted)[7f6299ef4000+7a2000] 最近老是遇到一个错误码为14的段错误,通过网络查阅资料,发现很多资料都写的是错误码是由三个bit...
一个常见的错误pthread_create()的参数
LINUX 传递‘pthread_create’的第 3 个参数时在不兼容的指针类型间转换 LINUX SUSE SP4环境gcc编译报标题的警告,执行时报段错误 代码如下 void * xxx(int *xa) { ... } int main(int argc, char* argv[]) { ... int xxa; pthread_create(&threadID,
Linux下的段错误产生的原因及调试方法-转
分类: Linux--Ubuntu入门级 重学C/C++2011-10-19 22:13 332人阅读 评论(0) 收藏 举报 因为你调用了glibc的fputs 检查你传进去的char* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 同学们在做Linux练习的时候,编译完程序,执行
pthread_create函数创建线程失败的原因
自己在arm上进行测试,pthread_create函数竟然出错了,有点吃惊。自己百度后明白,是因为线程资源的问题:没有进行资源的回收。 可是自己确定自己的代码在这一块没有出现问题,找了好久发现,有可能是自己arm板子上的资源不足了,自己通过ulimit -s 来设置线程默认栈空间大小,编译通过了。 原来真是资源不足呀! linux下pthread_attr_setstacksize函数,是
PTA——段错误
在PTA上做题,做出来个段错误,一查吓一跳,发篇博客冷静下。(#^.^#) 1076 Wifi密码 (15 分) 下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1;B-2;C-3;D-4;请同学们自己作答,每两日一换。谢谢合作!!~”—— 老师们为了促进学生学习也是拼了…… 本题就要求你写程序把...
linux mmap 总线错误
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1988350&ordertype=1 用mmap映射两个文件,然后把一个文件的内容复制到另一个文件 采用的是memcpy函数 但是使用这个函数出现了总线错误 我把两个映射的地址和长度都输出来了 请高手给分析一下。 输出结果: file size = 18 src = 0xb
由pthread库版本不一致导致的段错误
由pthread库版本不一致导致的段错误
在linxu中经常发生段错误(segment fault)的原因
        我们在linux上写代码,并运行程序时,经常会碰到程序执行到一半发生“segment fault”的错误,一头雾水,而且对这类问题的排查也是相当麻烦的一件事。而且我在面试的过程中也被面试官问到过这个问题,所以了解发生这个问题的原因对于在linux开发的技术人员来说是很有必要的。        引起这个错误的典型情况是对非法指针解引用。当指针指向一个不允许读或写的内存地址,而程序却试...
处理C语言之vfprintf的段错误
C语言的段错误想必是每个人都遇到过,整理一下,以供学习之用。 今天我执行了一个程序,运行了很长时间后,段错误了,我定位了一下,原来是fprintf的问题,具体是vfprintf的问题。 Program received signal SIGSEGV, Segmentation fault. 0x0098735e in vfprintf () from /lib/libc.so.6 调用栈
Linux Socket Errno错误代码列表以及常见错误
错误号 错误 可能的原因 EAGAIN Try again 在读数据的时候,没有数据在底层缓冲的时候会遇到,一般的处理是循环进行读操作,异步模式还会等待读事件的发生再读 EWOULDBLOCK Operation would block 在我们的环境中和EAGAIN是一个值, 一般情况下只关心EAGAI
pthread_join的段错误
运行的时候能够打出三行AAAA
new一个数组出现段错误,signal 6
错误代码块如图所示,运行出现段错误,调试core文件,结果如下 是6号信号引起的core,仔细看代码时发现开辟数组大小的recordnum是一个函数返回值,该函数运行出错返回-1,导致开数组失败引发段错误。...
内存访问地址段错误
段错误 :        1.段错误定义:       段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。        2. 段错误产生的原因 :        2.1 访问不存在的内存地址         #include #include void ma
curl 出现错误的调试方法
private function httpGet($url) {             $curl = curl_init();             curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);             curl_setopt($curl, CURLOPT_TIMEOUT, 500);
c++ 段错误 (core dumped )原因分析
程序可以编译通过,执行的时候遇到段错误 段错误有各种原因,具体见博客:http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 下面介绍一下,我在实际项目中遇到的段错误及解决方法:
Linux系统中段错误的原因
问:Linux系统中段错误的原因? 答:段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。总结,就是非法访问内存时,会发生段错误。
PAT刷题之段错误
PAT刷题之段错误【updating…】 1.什么是段错误? 先给出一张图,所谓的段错误就是:Segmentation fault 在提交 pat 的一道题时,出现了这个段错误。其实更具体的报错是: Program received signal SIGSEGV,Segmentation fault. 我尝试使用不同的测试用例调试时,发现的确存在这个问题,如下: 2.如何解决? 可能是程序...
dmesg 段错误
放了一个定时任务,定时执行dmesg -c $ cd /etc/cron.d $ cat dmesg_clean */1 * * * * root dmesg -c &amp;&gt; /dev/null $ sudo ls /var/log/messages* -alk -rw------- 1 root root 566 Aug 21 11:37 /var/log/message...
段错误的原因和解决办法
"段错误"这个内存访问越界的错误 可能是数组越界,堆栈溢出 int count=0; char str[1000]; while((str[count]=getchar())!='\n')count++;  提交上去之后,会出现 段错误 ?? 因为C风格字符串不会自动检查是否越界并调整大小
Linux下运行C++程序出现“段错误(核心已转储)”的原因
转载自:http://www.linuxidc.com/Linux/2015-09/122966.htm 今天Linux下写程序出现了“段错误(核心已转储)"的问题,查了一下资料,加上自己的实践,总结了以下几个方面的原因。 1.内存访问出错 这类问题的典型代表就是数组越界。 2.非法内存访问 出现这类问题主要是程序试图访问内核段内存而产生的错误。 3.栈溢出 Linux默认给一个进程
linux socket错误提示errno分析
参考链接:http://aigo.iteye.com/blog/1911134 参考链接:https://baike.baidu.com/item/errno/11040395?fr=aladdin Linux网络编程socket错误分析 errno的一些错误定义 编辑 以下主要来自2.6.32的内核代码中的/usr/include/asm-generic/e
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 大数据培训呢 区块链培训班呢