[转]gdb结合coredump定位崩溃进程
[转]gdb结合coredump定位崩溃进程
http://blog.sina.com.cn/s/blog_54f82cc201013tk4.html
Linux环境下经常遇到某个进程挂掉而找不到原因,我们可以通过生成core file文件加上gdb来定位。
ulimit -c unlimited
这样便把core
file的大小设置为了无限大,同时也可以使用数字来替代unlimited,对core
file的上限值做更精确的设定。
file在哪里?
file生成的地方是在/proc/sys/kernel/core_pattern文件定义的。
echo "pattern"
> /proc/sys/kernel/core_pattern
并且只有超级用户可以修改这两个文件。
%p: 相当于
%u: 相当于
%g: 相当于
%s:
相当于导致dump的信号的数字
%t: 相当于dump的时间
%h:
相当于hostname
%e:
相当于执行文件的名称
file到系统/tmp目录下,并记录pid以及执行文件名
> /proc/sys/kernel/core_pattern
|
1
2
3
4
5
6
7
8
9
10
11
12
|
#includeintfunc(int *p){ *p}intmain(){ func(NULL); return0;} |
a.c
Segmentation fault (core
dumped)
main /tmp/core-main-10815
fault.
#0 0x080483ba in func ()
如何定位到行?
main -g a.c
gdb main
/tmp/core-main-10815
Segmentation fault.
#0 0x080483ba in func (p=0x0) at a.c:5
5
*p = 0;
unlimited
echo "/tmp/core-%e-%p"
> /proc/sys/kernel/core_pattern
main -g a.c
/tmp/core-main-10815
backtrace
fault.
0x080483ba in func (p=0x0) at
main.c:5
*p = 0;
0x080483ba in func (p=0x0) at
main.c:5
0x080483d4 in main () at
main.c:10
thread apply all backtrace
[var]
= (int *) 0x0
= (int **) 0xbf96d4d4
[Address]
is a repeat count followed by a format letter and a size
letter.
u(unsigned decimal),
a(address), i(instruction), c(char) and
s(string).
g(giant, 8 bytes).
specified number of objects of the specified size are
printed
file文件的信号有以下10种
SIGQUIT:终端退出符
SIGILL:非法硬件指令
SIGTRAP:平台相关的硬件错误,现在多用在实现调试时的断点
SIGBUS:与平台相关的硬件错误,一般是内存错误
SIGABRT:调用abort函数时产生此信号,进程异常终止
SIGFPE:算术异常
SIGSEGV:segment
violation,无效内存引用
SIGXCPU:超过了cpu使用资源限制(setrlimit)
SIGXFSZ:超过了文件长度限制(setrlimit)
SIGSYS:无效的系统调用
[转]gdb结合coredump定位崩溃进程的更多相关文章
- gdb调试coredump(使用篇)
gdb调试coredump(使用篇) 看到一个非常好的介绍coredump的文章,做个记录, 参考链接: https://blog.csdn.net/sunxiaopengsun/article/de ...
- 使用GDB生成coredump文件【转载】
本文转载自: http://blog.csdn.net/sky_qing/article/details/8548989 如果在测试过程中遇到某个进程的CPU利用率过高或者卡死而需要去调试该进程时,可 ...
- gdb 调试coredump文件过程
gdb 调试coredump文件过程: 第一步:首先需要一个进程的coredump文件,怎么搞出coredump文件呢? 1. ps -fax|grep 进程名称 找到 ...
- gdb调试coredump文件
linux上程序崩溃起来挺烦人,不过linux 比较好的是有gdb. 1.生成coredump文件 echo "ulimit -c unlimited" >> /etc ...
- linux下gdb如何处理coredump错误
linux下gdb如何处理coredump错误 在编写C++程序中,我们经常会遇到一种错误,segment fault, 这种coredump错误 会导致程序运行时异常退出或者终止,这种错误没有明显错 ...
- gdb/valgrind/coredump to debug c/cpp program
gdb/valgrind/coredump 调试 1.gdb 调试 while/for 循环 ①如果在调试 while/for的时候,可以用until xxx(其中,xxx代表 行号)直接跳转到循环后 ...
- VS2008通过 map 和 cod 文件定位崩溃代码行
VS 2005/2008使用map文件查找程序崩溃原因 一般程序崩溃可以通过debug,找到程序在那一行代码崩溃了,最近编一个多线程的程序,都不知道在那发生错误,多线程并发,又不好单行调试,终于找到一 ...
- Linux下利用coredump技术追查进程崩溃原因
原文链接:https://blog.csdn.net/u014585564/article/details/68063269 最近项目中出现了一个问题,服务器端程序会突然崩溃退出,我们采取了cored ...
- 嵌入式arm-linux mips-linux 交叉编译GDB,结合vscode图形化调试使用,coredump定位段错误
第一部分:使用GDB GDB源码下载路径:http://ftp.gnu.org/gnu/gdb/ 遇到的主要难点: 选择合适的GDB源码版本 我的mips-linux交叉编译器不支持C++11特性,所 ...
随机推荐
- iOS 国际化
1.在APPproject的新建一个Localizable.strings File->new file--->Resource --->strings File 2.添加需要的语言 ...
- C# 最原始的tree 递归使用
; i < dr.Rows.Count; i++) { ) { n ...
- VS2010调试生成的文件
调试时IntelliTrace打开了,关闭IntelliTrace就可以了, Win7的话在C:\ProgramData\Microsoft Visual Studio\10.0\TraceDebug ...
- javaSE第十三天
第十三天 76 1. StringBuffer(掌握) 76 (1)说明: 77 (2)StringBuffer的构造方法 77 (3)StringBuffer的常见功能 ...
- _func_
__func__标识符 引用:http://blog.csdn.net/zhoujunyi/article/details/1572325 __func__是C99标准里面预定义标识符, 它是一个st ...
- 使用C#三维绘图控件快速搭建DXF查看程序
本例使用AnyCAD .Net三维图形控件快速实现一个DXF文件的读取.显示.导出JPG.PNG.PDF的应用. 代码: using System; using System.Collections. ...
- 简单记事本程序java源码项目
代码如下 import java.awt.*; import java.io.*; import java.awt.datatransfer.*; import java.awt.event.*; p ...
- JavaScript高级 函数表达式 《JavaScript高级程序设计(第三版)》
函数表达式的特征 使用函数实现递归 使用闭包定义私有变量 前面我们说到定义函数有两种方式:函数声明.函数表达式. 两者的区别在于函数声明提升,前者在执行之前的上下文环境中直接被赋值,而后者不会. 一. ...
- C puzzles详解【31-33题】
第三十一题 The following is a simple C program to read and print an integer. But it is not working proper ...
- CSS网页布局错位:CSS宽度计算
为什么计算宽度计算网页像素宽度是为了CSS网页布局整齐与兼容.常见的我们布局左右结构网页或使用padding.margin布局的时候将计算整页宽度,如果不计算无论是宽度过大过小就会出现错位问题. 怎么 ...