- 浏览: 497065 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (339)
- C# (2)
- Java集合 (7)
- Java设计模式 (15)
- Java基础 (31)
- Java-Spring (7)
- Java-Spring AOP (9)
- Java-Spring Transaction (6)
- Java-Hibernate (13)
- Jsp (7)
- JSTL (2)
- 加密解密 (13)
- sql (3)
- 数据库技术 (7)
- JQuery (2)
- css (3)
- JavaScript (19)
- Linux (34)
- 项目管理 (5)
- Tomcat (5)
- Oracle (4)
- axis2 (5)
- Linux c/c++ (40)
- Linux 防火墙及抓包分析 (10)
- Linux 环境配置 (3)
- Linux 高级命令 (14)
- Linux Server 配置 (9)
- c++ 内存管理 (4)
- JUnit (1)
- SSL 通信 (2)
- windows 系统调试 (8)
- 字符串处理 (8)
- 排序算法 (7)
- ACE (1)
- IT技术 (1)
- 敏捷开发 (1)
- TCPIP (4)
- 汇编语言 (7)
- STL (2)
- Struts (1)
- iBatis (3)
- 音视频开发 (2)
- Java多线程 (3)
- 架构设计 (2)
- Java网络编程 (1)
- Ubantu (0)
- Eclipse (2)
最新评论
-
df270464278:
请问博主有遇到中文乱码的问题吗?就是json字符串里面包含中文 ...
cur发送json字符串, post 请求 -
ykbj117:
你们知道刘绍华么?就是北邮的一个教授,专门研究WebRTC的资 ...
WebRTC -
隐形的翅膀:
不会用powershell
去除SVN标志 -
lengbamboo:
改注册表比较危险,给个powershell的脚本:powers ...
去除SVN标志 -
hedong56:
[/b][b][i][/i][u][/u][flash=20 ...
JAVASCRIPT定义对象的四种方式
怎么解决你的Segmentation fault (core dumped)问题
http://westsoftware.blog.163.com/blog/static/260941092011460252776/
关于Segmentation fault (core dumped)几个简单问题的整理
有的程序可以通过编译,但在运行时会出现Segment fault(段错误)。这通常都是指针错误引起的。但这不像编译错误一样会提示到文件一行,而是没有任何信息。一种办法是用gdb的step, 一步一步寻找。但要step一个上万行的代码让人难以想象。 我们还有更好的办法,这就是core file。
如果想让系统在信号中断造成的错误时产生core文件, 我们需要在shell中按如下设置:
#设置core大小为无限 ulimit -c unlimited
#设置文件大小为无限 ulimit unlimited
发生core dump之后,用gdb进行查看core文件的内容, 以定位文件中引发core dump的行:
gdb [exec file] [core file]
如: gdb ./test test.core 在进入gdb后, 用bt命令查看backtrace以检查发生程序运行到哪里,来定位core dump的文件->行。
另外需要注意的是,如果你的机器上跑很多的应用,你生成的core又不知道是哪个应用产生的,你可以通过下列命令进行查看:file core
几个问题:
1. 什么是Core:
在使用半导体作为内存的材料前,人类是利用线圈当作内存的材料(发明者为王安),线圈就叫作 core ,用线圈做的内存就叫作 core memory。如今 ,半导体工业澎勃发展,已经没有人用 core memory 了,不过,在许多情况下,人们还是把记忆体叫作 core 。
2. 什么是Core Dump:
我们在开发(或使用)一个程序时,最怕的就是程序莫明其妙地当掉。虽然系统没事,但我们下次仍可能遇到相同的问题。于是这时操作系统就会把程序当掉 时的内存内容 dump 出来(现在通常是写在一个叫 core 的 file 里面),让 我们或是 debugger 做为参考。这个动作就叫作 core dump。
3. Core Dump时会生成何种文件:
Core Dump时,会生成诸如 core.进程号 的文件。
4. 为何有时程序Down了,却没生成 Core文件。
Linux下,有一些设置,标明了resources available to the shell and to processes。 可以使用
#ulimit -a 来看这些设置。 (ulimit是bash built-in Command)
从这里可以看出,如果 -c是显示:core file size。如果这个值为0,则无法生成core文件。所以可以使用:#ulimit -c 1024 或者 #ulimit -c unlimited 来使能 core文件。如果程序出错时生成Core 文件,则会显示Segmentation fault (core dumped) 。
5. Core Dump的核心转储文件目录和命名规则:
/proc/sys/kernel /core_uses_pid可以控制产生的core文件的文件名中是否添加pid作为扩展,如果添加则文件内容为1,否则为0
可通过以下命令修改此文件:
echo "1" > /proc/sys/kernel/core_uses_pid
6. 如何使用Core文件:
在Linux下,使用:
#gdb -c core.pid program_name
就可以进入gdb模式。
输入where,就可以指出是在哪一行被Down掉,哪个function内,由谁调用等等。
(gdb) where
或者输入 bt。
(gdb) bt
7. 如何让一个正常的程序down:
#kill -s SIGSEGV pid
8. 察看Core文件输出在何处:
存放Coredump的目录即进程的当前目录,一般就是当初发出命令启动该进程时所在的目录。但如果是通过脚本启动,则脚本可能会修改当前目录,这时进程真正的当前目录就会与当初执行脚本所在目录不同。这时可以查看”/proc/<进程pid>/cwd“符号链接的目标来确定进程真正的当前目录地址。通过系统服务启动的进程也可通过这一方法查看。
proc/sys/kernel /core_pattern可以控制core文件保存位置和文件名格式。
可通过以下命令修改此文件:
echo "/corefile/core-%e-%p-%t" >core_pattern
可以将core文件统一生成到/corefile目录下,产生的文件名为core-命令名-pid-时间戳
以下是参数列表:
%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加当前uid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加命令名
在Linux下要保证程序崩溃时生成 Coredump要注意这些问题:
一、要保证存放Coredump的目录存在且进程对该目录有写权限。存放Coredump 的目录即进程的当前目录,一般就是当初发出命令启动该进程时所在的目录。但如果是通过脚本启动,则脚本可能会修改当前目录,这时进程真正的当前目录就会与当初执行脚本所在目录不同。这时可以查看”/proc/进程pid>/cwd“符号链接的目标来确定进程真正的当前目录地址。通过系统服务启动的进程也可通过这一方法查看。
二、若程序调用了seteuid()/setegid()改变了进程的有效用户或组,则在默认情况下系统不会为这些进程生成Coredump。很多服务程序都会调用seteuid(),如MySQL,不论你用什么用户运行 mysqld_safe启动MySQL,mysqld进行的有效用户始终是msyql用户。如果你当初是以用户A运行了某个程序,但在ps里看到的这个程序的用户却是B的话,那么这些进程就是调用了seteuid了。为了能够让这些进程生成core dump,需要将/proc/sys/fs
/suid_dumpable 文件的内容改为1(一般默认是0)。
三、这个一般都知道,就是要设置足够大的Core文件大小限制了。程序崩溃时生成的 Core文件大小即为程序运行时占用的内存大小。但程序崩溃时的行为不可按平常时的行为来估计,比如缓冲区溢出等错误可能导致堆栈被破坏,因此经常会出现某个变量的值被修改成乱七八糟的,然后程序用这个大小去申请内存就可能导致程序比平常时多占用很多内存。因此无论程序正常运行时占用的内存多么少,要保证生成Core文件还是将大小限制设为unlimited为好。
四、异常退出就一定会生成core吗? 难道没有不生成core的异常退出?
如果不是正常退出的那就是有信号引起的程序退出,有些信号确实能引起程序退出但不生成core。
SIGHUP 终止进程 终端线路挂断
SIGINT 终止进程 中断进程
SIGQUIT 建立CORE文件终止进程,并且生成core文件
SIGILL 建立CORE文件 非法指令
SIGTRAP 建立CORE文件 跟踪自陷
SIGBUS 建立CORE文件 总线错误
SIGSEGV 建立CORE文件 段非法错误
SIGFPE 建立CORE文件 浮点异常
SIGIOT 建立CORE文件 执行I/O自陷
SIGKILL 终止进程 杀死进程
SIGPIPE 终止进程 向一个没有读进程的管道写数据
SIGALARM 终止进程 计时器到时
SIGTERM 终止进程 软件终止信号
SIGSTOP 停止进程 非终端来的停止信号
SIGTSTP 停止进程 终端来的停止信号
SIGCONT 忽略信号 继续执行一个停止的进程
SIGURG 忽略信号 I/O紧急信号
SIGIO 忽略信号 描述符上可以进行I/O
SIGCHLD 忽略信号 当子进程停止或退出时通知父进程
SIGTTOU 停止进程 后台进程写终端
SIGTTIN 停止进程 后台进程读终端
SIGXGPU 终止进程 CPU时限超时
SIGXFSZ 终止进程 文件长度过长
SIGWINCH 忽略信号 窗口大小发生变化
SIGPROF 终止进程 统计分布图用计时器到时
SIGUSR1 终止进程 用户定义信号1
SIGUSR2 终止进程 用户定义信号2
SIGVTALRM 终止进程 虚拟计时器到
把可能的信号都设置上句柄,看是那种情况。
http://westsoftware.blog.163.com/blog/static/260941092011460252776/
关于Segmentation fault (core dumped)几个简单问题的整理
有的程序可以通过编译,但在运行时会出现Segment fault(段错误)。这通常都是指针错误引起的。但这不像编译错误一样会提示到文件一行,而是没有任何信息。一种办法是用gdb的step, 一步一步寻找。但要step一个上万行的代码让人难以想象。 我们还有更好的办法,这就是core file。
如果想让系统在信号中断造成的错误时产生core文件, 我们需要在shell中按如下设置:
#设置core大小为无限 ulimit -c unlimited
#设置文件大小为无限 ulimit unlimited
发生core dump之后,用gdb进行查看core文件的内容, 以定位文件中引发core dump的行:
gdb [exec file] [core file]
如: gdb ./test test.core 在进入gdb后, 用bt命令查看backtrace以检查发生程序运行到哪里,来定位core dump的文件->行。
另外需要注意的是,如果你的机器上跑很多的应用,你生成的core又不知道是哪个应用产生的,你可以通过下列命令进行查看:file core
几个问题:
1. 什么是Core:
在使用半导体作为内存的材料前,人类是利用线圈当作内存的材料(发明者为王安),线圈就叫作 core ,用线圈做的内存就叫作 core memory。如今 ,半导体工业澎勃发展,已经没有人用 core memory 了,不过,在许多情况下,人们还是把记忆体叫作 core 。
2. 什么是Core Dump:
我们在开发(或使用)一个程序时,最怕的就是程序莫明其妙地当掉。虽然系统没事,但我们下次仍可能遇到相同的问题。于是这时操作系统就会把程序当掉 时的内存内容 dump 出来(现在通常是写在一个叫 core 的 file 里面),让 我们或是 debugger 做为参考。这个动作就叫作 core dump。
3. Core Dump时会生成何种文件:
Core Dump时,会生成诸如 core.进程号 的文件。
4. 为何有时程序Down了,却没生成 Core文件。
Linux下,有一些设置,标明了resources available to the shell and to processes。 可以使用
#ulimit -a 来看这些设置。 (ulimit是bash built-in Command)
从这里可以看出,如果 -c是显示:core file size。如果这个值为0,则无法生成core文件。所以可以使用:#ulimit -c 1024 或者 #ulimit -c unlimited 来使能 core文件。如果程序出错时生成Core 文件,则会显示Segmentation fault (core dumped) 。
5. Core Dump的核心转储文件目录和命名规则:
/proc/sys/kernel /core_uses_pid可以控制产生的core文件的文件名中是否添加pid作为扩展,如果添加则文件内容为1,否则为0
可通过以下命令修改此文件:
echo "1" > /proc/sys/kernel/core_uses_pid
6. 如何使用Core文件:
在Linux下,使用:
#gdb -c core.pid program_name
就可以进入gdb模式。
输入where,就可以指出是在哪一行被Down掉,哪个function内,由谁调用等等。
(gdb) where
或者输入 bt。
(gdb) bt
7. 如何让一个正常的程序down:
#kill -s SIGSEGV pid
8. 察看Core文件输出在何处:
存放Coredump的目录即进程的当前目录,一般就是当初发出命令启动该进程时所在的目录。但如果是通过脚本启动,则脚本可能会修改当前目录,这时进程真正的当前目录就会与当初执行脚本所在目录不同。这时可以查看”/proc/<进程pid>/cwd“符号链接的目标来确定进程真正的当前目录地址。通过系统服务启动的进程也可通过这一方法查看。
proc/sys/kernel /core_pattern可以控制core文件保存位置和文件名格式。
可通过以下命令修改此文件:
echo "/corefile/core-%e-%p-%t" >core_pattern
可以将core文件统一生成到/corefile目录下,产生的文件名为core-命令名-pid-时间戳
以下是参数列表:
%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加当前uid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加命令名
在Linux下要保证程序崩溃时生成 Coredump要注意这些问题:
一、要保证存放Coredump的目录存在且进程对该目录有写权限。存放Coredump 的目录即进程的当前目录,一般就是当初发出命令启动该进程时所在的目录。但如果是通过脚本启动,则脚本可能会修改当前目录,这时进程真正的当前目录就会与当初执行脚本所在目录不同。这时可以查看”/proc/进程pid>/cwd“符号链接的目标来确定进程真正的当前目录地址。通过系统服务启动的进程也可通过这一方法查看。
二、若程序调用了seteuid()/setegid()改变了进程的有效用户或组,则在默认情况下系统不会为这些进程生成Coredump。很多服务程序都会调用seteuid(),如MySQL,不论你用什么用户运行 mysqld_safe启动MySQL,mysqld进行的有效用户始终是msyql用户。如果你当初是以用户A运行了某个程序,但在ps里看到的这个程序的用户却是B的话,那么这些进程就是调用了seteuid了。为了能够让这些进程生成core dump,需要将/proc/sys/fs
/suid_dumpable 文件的内容改为1(一般默认是0)。
三、这个一般都知道,就是要设置足够大的Core文件大小限制了。程序崩溃时生成的 Core文件大小即为程序运行时占用的内存大小。但程序崩溃时的行为不可按平常时的行为来估计,比如缓冲区溢出等错误可能导致堆栈被破坏,因此经常会出现某个变量的值被修改成乱七八糟的,然后程序用这个大小去申请内存就可能导致程序比平常时多占用很多内存。因此无论程序正常运行时占用的内存多么少,要保证生成Core文件还是将大小限制设为unlimited为好。
四、异常退出就一定会生成core吗? 难道没有不生成core的异常退出?
如果不是正常退出的那就是有信号引起的程序退出,有些信号确实能引起程序退出但不生成core。
SIGHUP 终止进程 终端线路挂断
SIGINT 终止进程 中断进程
SIGQUIT 建立CORE文件终止进程,并且生成core文件
SIGILL 建立CORE文件 非法指令
SIGTRAP 建立CORE文件 跟踪自陷
SIGBUS 建立CORE文件 总线错误
SIGSEGV 建立CORE文件 段非法错误
SIGFPE 建立CORE文件 浮点异常
SIGIOT 建立CORE文件 执行I/O自陷
SIGKILL 终止进程 杀死进程
SIGPIPE 终止进程 向一个没有读进程的管道写数据
SIGALARM 终止进程 计时器到时
SIGTERM 终止进程 软件终止信号
SIGSTOP 停止进程 非终端来的停止信号
SIGTSTP 停止进程 终端来的停止信号
SIGCONT 忽略信号 继续执行一个停止的进程
SIGURG 忽略信号 I/O紧急信号
SIGIO 忽略信号 描述符上可以进行I/O
SIGCHLD 忽略信号 当子进程停止或退出时通知父进程
SIGTTOU 停止进程 后台进程写终端
SIGTTIN 停止进程 后台进程读终端
SIGXGPU 终止进程 CPU时限超时
SIGXFSZ 终止进程 文件长度过长
SIGWINCH 忽略信号 窗口大小发生变化
SIGPROF 终止进程 统计分布图用计时器到时
SIGUSR1 终止进程 用户定义信号1
SIGUSR2 终止进程 用户定义信号2
SIGVTALRM 终止进程 虚拟计时器到
把可能的信号都设置上句柄,看是那种情况。
发表评论
-
SNMP
2013-12-09 13:18 791SNMP Trap 是一种标准的报 ... -
Linux 网络配置相关
2013-07-02 08:57 7221,查看网卡型号 lspci |grep -i eth ... -
Install maven and python
2013-06-04 09:53 9541. Install Maven2. edit /et ... -
Sed 的使用
2013-05-04 22:16 8391. 读取文件中包含 字符串 pack ... -
安装python2.7
2012-11-23 15:22 900wget http://www.python.org/ftp/ ... -
LINUX 日期类命令
2012-10-11 16:58 8241. date -d "+6 month" ... -
LINUX 日期类命令
2012-10-11 16:54 8901. date -d "+6 month" ... -
SecureCRT终端显示gcc编译错误提示乱码问题
2012-10-01 11:04 1550SecureCRT终端显示gcc编译错误提示乱码问题 Win ... -
JNA—JNI终结者
2012-07-20 20:33 1147JNA—JNI终结者 介绍 给 ... -
process to read file
2012-07-20 20:19 10751. src\company\project\server\s ... -
java调用dll或so动态库文件(c++/c)
2012-07-20 20:00 12931.java调用dll或so动态库文件(c++/c) http ... -
linux 测试物理路径通不通
2012-05-17 16:59 10591. mii-tool etho ba diao wangx ... -
linux 下调试tomcat, 及将错误重定向到某个文件
2012-05-11 13:26 10631. 下载解压缩版的tomcat 2. export JPD ... -
MakeFile的制作
2012-04-18 16:34 1138CURDIR= $(shell pwd) export ... -
Java 执行linux 中的脚本
2012-04-18 15:36 904private static Logger logger ... -
一些待研究的工具
2012-04-05 13:53 7401. winScp 2. wireShark 3. Rab ... -
根据端口号杀掉进程
2012-04-01 09:22 1305#!/bin/bash APP_START_ ... -
centos修复gnome
2012-02-20 15:15 2532重装 switchdesk和GNOME后重启,恢复! ... -
安装mod_jk
2012-02-03 10:34 876安装mod_jk [root@localhost ~]# ... -
使用脚本启动停止JAVA程序
2011-12-13 10:06 1154#!/bin/bash APP_MAINCLAS ...
相关推荐
在Linux环境下,编程时经常会遇到一个让开发者头疼的问题——段错误(Segmentation fault)。这个问题通常是由于程序尝试访问其不应该访问或者无法访问的内存区域而触发的。本文将深入探讨段错误的原因以及如何在...
本文将深入探讨一个特定的问题——如何解决在欧拉系统(openEuler-22.03)上安装深信服EasyConnect软件时出现的“segmentation fault”错误,并提供相应的解决方案。 首先,让我们了解一下欧拉系统。欧拉系统(open...
在编程过程中,我们时常会遇到各种编译错误,其中一种比较棘手的错误是"collect2: fatal error: ld terminated with signal 11 [Segmentation fault], core dumped"。这个错误通常发生在尝试使用g++或gcc编译C++或C...
在Linux操作系统中,当一个进程由于各种原因,如非法内存访问、除以零等,触发了段错误(Segmentation Fault)时,系统可以生成一种名为core dump的文件,记录程序崩溃时的内存状态和调用堆栈信息。这对于调试和诊断...
在深入探讨Linux下段错误的产生原因与调试方法之前,我们先来理解一下“段错误”(Segmentation Fault)的基本概念。段错误,通常由信号SIGSEGV触发,是操作系统检测到程序试图访问它不应该访问的内存区域时所引发的...
qt-sdk-linux-x86-opensource-2009.03.bin.part5 ||QT开发SDK
项目有错误
“Super Pi”测试过程简单直接:用户只需运行程序,选择要计算的π位数,然后软件就会开始计算。计算时间越短,表明CPU的单线程性能越强。值得注意的是,通过多次运行“Super Pi”,例如开启多个实例,可以大致评估...
解决小觅相机S1030或者S1040升级后无法使用的问题,Solve the problem that the small mi camera S1030 or S1040 cannot be used after upgrading. 问题描述见:...Aborted (core dumped)
### gpgpu-sim安装须知及问题解决 #### 一、gpgpu-sim简介 gpgpu-sim是一款高性能的GPU模拟器,主要用于研究和开发GPU架构以及相关的编程模型。通过模拟GPU的行为,研究人员可以更好地理解GPU的内部运作机制,并在...
好用免费资源共享
- **Core Dump**:当程序异常结束时,系统将程序内存、寄存器信息、内存管理信息等保存到一个文件中,这个文件被称为core dump文件,它可以提供程序崩溃时的内存快照。 - **内存快照**:包含了程序运行时的内存...
Segmentation fault (core dumped) ``` 为了诊断这个问题,我们可以通过truss来跟踪clint的系统调用情况: ``` # truss -f -o clint.truss clint Segmentation fault (core dumped) # tail clint.truss 739: read...
Python 解释器在 26186 处崩溃,说明 Segmentation fault core dumped 事实 50000 的 Julia 3.8 秒!!!!!! 哇1min 0.1s 事实 60000 Ubuntu 在 75000 内存问题下崩溃 哈斯克尔 因式递归 事实 2,00,000 => 33....
Segmentation fault (core dumped) 在 Unix 系统中遇见“Segmentation Fault”就像在 MS Windows 中弹出“非法操作”对话框一样令人讨厌。OK,我们用 truss 给 clint “把把脉”: # truss -f -o clint.truss ...
Segmentation fault (core dumped) ``` 现在我们可以用GDB来调试这个Core文件。首先,启动GDB并加载Core文件和可执行文件: ```bash /opt # gdb hello core ``` GDB读取了Core文件后,我们可以看到程序崩溃的信号...
执行可执行程序直到出现 Segmentation fault (core dumped) 错误,表示 Core Dump 文件生成成功。在这里,我们可以使用 `gdb` 工具来查看 Core Dump 文件的内容。 4. 使用 GDB 分析 Core Dump 文件 使用 `gdb` ...
2. **Segmentation Fault(核心转储)**:在“线程竞争 Segmentation fault (core dumped).png”中提到的Segmentation Fault是一种典型的运行时错误,通常由于非法内存访问引起,如访问未分配的内存或者越界访问数组...