linux程序运行段错误,Linux下的段错误产生的原因及调试方法
Linux下的段错误产生的原因及调试方法
简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.
一般来
说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的
gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,
在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。一旦一个程序发生了越界
访问,cpu就会产生相应的异常保护,于是segmentation fault就出现了.
在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的
1)访问系统数据区,尤其是往 系统保护的内存地址写数据
最常见就是给一个指针以0地址
2)内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域
解决方法
我
们在用C/C++语言写程序的时侯,内存管理的绝大部分工作都是需要我们来做的。实际上,内存管理是一个比较繁琐的工作,无论你多高明,经验多丰富,难
免会在此处犯些小错误,而通常这些错误又是那么的浅显而易于消除。但是手工“除虫”(debug),往往是效率低下且让人厌烦的,本文将就"段错误"这个
内存访问越界的错误谈谈如何快速定位这些"段错误"的语句。
下面将就以下的一个存在段错误的程序介绍几种调试方法:
1 dummy_function (void)
2 {
3 unsigned char *ptr = 0x00;
4 *ptr = 0x00;
5 }
6
7 int main (void)
8 {
9 dummy_function ();
10
11 return 0;
12 }
作为一个熟练的C/C++程序员,以上代码的bug应该是
相关文档:
例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......
今天发现很多程序死在linux 服务进中
问个问题 今天发现很多程序死在linux 服务进中
已经死了好多天了。用crontab 都定在 凌晨0点跑。
想知道如何查看 服务器哪方面的资源太少导致进程死在里面?
ps -ef|grep load/script | awk '{print $2}' 把死进程的 ID 打印出来
......
3、线程标识
函数原型:
#include
pthread_t pthread_self(void);
pid_t getpid(void);
getpid()用来取得目前进程的进程识别码,函数说明
例程8
程序目的:实现在新建立的线程中打印该线程的id和进 ......
//videoserver
#!/bin/bash
#
# videoserver
#
# chkconfig: 3456 11 91
# description: videoserver
# Source function library.
. /etc/rc.d/init.d/functions
prog="videoserver"
start() {
# Start daemons.
echo -n $"Starting $prog: "
/video/videoserver/recordvideosvr /video/videoserver ......
linux程序运行段错误,Linux下的段错误产生的原因及调试方法相关推荐
- C语言程序运行黑屏,Win7开机黑屏代码0XC000000F的原因及解决方法
原标题:Win7开机黑屏代码0XC000000F的原因及解决方法 Win7开机黑屏出现0XC000000F代码是怎么回事?最近有用户朋友的电脑开机就遇到了这个问题,向云骑士求助.今天云骑士把解决该问题 ...
- 转Linux环境下段错误的产生原因及调试方法小结
Linux环境下段错误的产生原因及调试方法小结 转载于:https://www.cnblogs.com/objectDetect/p/7575659.html
- 005 Linux系统内存错误产生的原因及调试方法(段错误|core dumped)
Linux系统内存错误产生的原因及调试方法(段错误|core dumped)[转] Posted on 2008-09-05 14:52 猫头鹰 阅读(84) 评论(0) 编辑 收藏 引用 所属分类 ...
- 保姆级教程:Linux(Ubuntu 18.04)下VSCode配置与嵌入式开发平台X2000_Halley5调试环境搭建
保姆级教程:Linux(Ubuntu 18.04)下VSCode配置与嵌入式开发平台X2000_Halley5调试环境搭建 写在前面 配置VSCode的编译环境 配置VSCode的gdb调试环境 配置 ...
- vc6.0程序运行报错误码为0xc0000005的错误。
问题: vc6.0程序运行报错误码为0xc0000005的错误. 原因: 自己的代码有问题,导致访问了非法地址,出现该问题.
- 计算机本地硬盘带蓝色问号,Win10系统下磁盘显示蓝色问号的原因和解决方法
升级windows10系统后,发现电脑中有个磁盘竟然显示蓝色问号,双击打开的时候提示:"无法访问等等",这是怎么回事呢?我们该如何操作呢?接下来,就随小编看看Win10系统下磁盘显 ...
- webpack 运行提示“The ‘mode‘ option has not been set”的原因和解决方法
webpack 运行提示"The 'mode' option has not been set"的原因和解决方法 参考文章: (1)webpack 运行提示"The 'm ...
- python waitkey_关于python下cv.waitKey无响应的原因及解决方法
按下键的时候,焦点要落在窗口上,不能落在cmd窗口上. 另外,一般在imshow()后要使用waitKey(),给图像绘制留下时间,不然窗口会出现无响应情况,并且图像无法显示出来. int waitK ...
- 关于MySQL错误 2005 - Unknown MySQL server host ‘localhost‘ (0) 原因及解决方法
关于MySQL错误 2005 - Unknown MySQL server host 'localhost' (0) 原因及解决方法 参考文章: (1)关于MySQL错误 2005 - Unknown ...
最新文章
- JavaScript如何声明对象、函数以及对象中的函数(即方法)
- 安卓高手之路 图形系统(4 Measure的算法)
- python3 pip3 安装包报错 Could not find a version that satisfies the requirement 解决方法
- python多线程下载m3u8文件,python 实现多线程下载m3u8格式视频并使用fmmpeg合并
- 深度学习(四)卷积神经网络Lenet-5实现
- 超越Swin,Transformer屠榜三大视觉任务!微软推出新作:Focal Self-Attention
- 关于js浅拷贝与深拷贝的理解
- rs 实用工具 (rs.exe) (SSRS)SQL server report service
- “智云大咖秀”:大咖摄影师谈惊艳亮相的“大咖级”设备
- 《无线网络:理解和应对互联网环境下网络互连所带来的挑战》——第2章 无线生态系统 2.1无线标准化过程...
- 使用tmpfs存放MySQL的临时文件的问题一则
- 数据库历险记(三) | 缓存框架的连环炮
- Mac安装Gradle eclipse安装buildship插件
- 计算机专业志愿者活动策划书模板,青春益起来之电脑义诊活动策划书
- 字符串正则替换、点替换横杠
- scratch(图形化编程工具)使用画笔绘制雪绒花!真的太美了!
- 高等数学(第七版)同济大学 习题11-5 个人解答
- 搜索引擎Solr环境搭建详解
- 塞班java软件下载,附项目源码
- 【技术栈——00042】Docker网络端口指定的两种方式
热门文章
- oracle数据库文件dbf复制#ocp试验#
- C++day13 学习笔记
- C++-实现日志log功能
- docker 关闭所有容器_软件安全 : Docker逃逸详解
- 属性匹配工具_Route-policy的匹配工具If-match的使用简介
- linux搭建Django环境,linux下搭建python Django环境及启动一个示例
- 软件测试都需要哪些工具呢?一文带你看清
- mysql索引linke和等于_MySQL索引怎么用?秒懂只需四个点!
- c语言kmeans算法具体步骤,k-均值聚类算法c语言版
- MySQL的安装、启动、停止、卸载