转自:http://blog.csdn.net/yearn520/article/details/6663265
在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。
首先看看默认的一些core的参数,注意core file size是个0,程序出错时不会产生core文件了。
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) 4
max memory size (kbytes, -m) unlimited
open files (-n) 2048
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 7168
virtual memory (kbytes, -v) unlimited
写个简单的程序,看看core文件是不是会被产生。
$ more foo.c
#include <stdio.h>
static void sub(void);
int main(void)
{
sub();
return 0;
}
static void sub(void)
{
int *p = NULL;
/* derefernce a null pointer, expect core dump. */
printf("%d", *p);
}
$ gcc -Wall -g foo.c
$ ./a.out
Segmentation fault
$ ls -l core.*
ls: core.*: No such file or directory
没有找到core文件,我们改改ulimit的设置,让它产生。1024是随便取的,要是core文件大于1024个块,就产生不出来了。
$ ulimit -c 1024 (转者注: 使用-c unlimited不限制core文件大小)
$ ulimit -a
core file size (blocks, -c) 1024
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) 4
max memory size (kbytes, -m) unlimited
open files (-n) 2048
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 7168
virtual memory (kbytes, -v) unlimited
$ ./a.out
Segmentation fault (core dumped)
$ ls -l core.*
-rw------- 1 uniware uniware 53248 Jun 30 17:10 core.9128
注意看上述的输出信息,多了个(core dumped)。确实产生了一个core文件,9128是该进程的PID。我们用GDB来看看这个core。
(转者注:默认生成的文件就叫core,不带PID,如果要带PID需要设置,通过echo "1" > /proc/sys/kernel/core_uses_pid能够设置pid)
$gdb --core=core.9128
GNU gdb Asianux (6.0post-0.20040223.17.1AX)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-asianux-linux-gnu".
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0 0x08048373 in ?? ()
(gdb)bt
#0 0x08048373 in ?? ()
#1 0xbfffd8f8 in ?? ()
#2 0x0804839e in ?? ()
#3 0xb74cc6b3 in ?? ()
#4 0x00000000 in ?? ()
此时用bt看不到backtrace,也就是调用堆栈,原来GDB还不知道符号信息在哪里。我们告诉它一下:
(gdb)file ./a.out
Reading symbols from ./a.out...done.
Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb)bt
#0 0x08048373 in sub () at foo.c:17
#1 0x08048359 in main () at foo.c:8
此时backtrace出来了。
(gdb) l8 sub();9 return 0;10 }1112 static void sub(void)13 {14 int *p = NULL;1516 /* derefernce a null pointer, expect core dump. */17 printf("%d", *p);
分享到:
相关推荐
根据提供的标题“GDB中文文档 linux下调试方法”以及描述中的关键内容,本文将详细介绍GDB在Linux环境下的使用方法,特别聚焦于设置各种类型的断点,并解释如何维护这些断点,以及如何利用GDB进行单步调试和其他高级...
- **/etc/profile**中的配置:默认情况下,Linux系统的`/etc/profile`文件中通常包含一行限制core dump大小的命令: ```sh ulimit -S -c 0 > /dev/null 2>&1 ``` 这行命令表示不允许生成core dump文件。如果...
Linux设备管理命令详解 本文档详细介绍了Linux设备管理命令的使用和应用,包括设备管理的基本概念、设备管理命令的使用方法、 devices文件系统、驱动程序控制、设备命名规则等。 知识点1: 设备管理的基本概念 ...
### Linux后台运行命令详解 #### 一、引言 在Linux操作系统中,用户可以通过各种方式启动后台任务。本文将重点介绍几种常用的Linux后台运行命令,包括快捷键方式以及`cron`和`crontab`命令的详细使用方法。这两种...
Core Dump 是 Linux 系统中一种特殊的文件,它记录了系统崩溃或死机时的系统状态信息。Core Dump 文件可以帮助开发者快速定位问题,解决系统崩溃的原因。 二、Core Dump 分析步骤 1. 抓取 trace:在系统崩溃后,...
"linux系统命令源码"这个压缩包文件,如`coreutils-5.97`,很可能是GNU Core Utilities的一个版本,它包含了大量常用Linux命令的源代码。 GNU Core Utilities是Linux和类UNIX系统中必不可少的一部分,提供了众多...
RedHat系列的发行版包括RedHat Enterprise Linux(RHEL)、CentOS、Fedora Core等,其中RHEL是商业公司的付费版本,稳定性高,CentOS则是RHEL的免费社区克隆版本,稳定性同样很高,而Fedora Core则是稳定性较差的...
* 在 Linux 下调试 Python 代码的各种方法 * 如何调试 Linux shell 脚本 * Linux 命令之调试工具 strace 的深入分析 * Linux 内核设备驱动之内核的调试技术笔记整理 这些知识点都是关于 Linux 和 .NET Core 开发、...
`coredump`是Linux系统中一种非常有用的故障排查工具,它记录了进程崩溃时的内存快照,可以帮助开发者分析程序错误的原因。本篇文章将围绕`coredump`分析进行入门讲解,结合实例深入探讨如何利用`coredump`来解决...
而对于系统管理,初学者应学会如何使用“ps”、“top”命令来查看进程状态,“netstat”命令来查看网络连接状态等。 在文件内容中还提到了vi编辑器,它是在Linux环境下最常用的文本编辑器之一,拥有两种模式:命令...
在Linux命令中,可以使用各种快捷键切换工作环境,例如在字符界面和图形界面之间切换。 Linux系统下提供了丰富的命令来操作文件和目录。例如: - 查看当前工作目录:使用`pwd`命令; - 切换工作目录:使用`cd`命令...
5. **分析`coredump`**:在`gdb`中,可以查看堆栈回溯(`bt`命令),检查崩溃时的变量值(`p`或`print`命令),以及跟踪函数调用流程。 6. **定位问题**:通过上述信息,可以定位导致崩溃的代码行,理解错误发生的...
Linux下Hadoop伪分布式配置及操作命令详细知识点: 1. Hadoop伪分布式模式说明: Hadoop伪分布式模式是一种在单台计算机上模拟分布式环境的配置方式,它通过使用线程来模拟多个节点的分布式工作,但实际上所有的...
`top`命令是最常用的实时系统性能监控工具,它可以显示CPU使用率、内存占用情况以及各个进程的状态。而`htop`是`top`的增强版,提供了颜色高亮和滚动功能,更便于用户查看。`vmstat`用于查看系统虚拟内存统计,`...
在Java编程中,有时我们需要与操作系统进行交互,执行系统级别的命令,例如在控制台执行CMD命令或者通过SSH连接远程Linux服务器执行shell命令。这在自动化脚本、系统管理或者远程监控等场景中非常常见。本篇文章将...
在 Linux 系统中,通常会在 `/etc/profile` 文件中添加以下命令,以禁止生成 Core 文件: `ulimit -S -c 0 > /dev/null 2>&1` 但是,在开发过程中,有时需要在特定的用户环境下打开 Core 文件产生的设置。可以在...
### Linux生成Core文件详解 在Linux环境中,当一个程序出现异常终止时,系统可以自动生成一个称为core dump的文件,这个文件包含了程序崩溃时的内存快照和其他相关信息,这对于调试和诊断程序错误非常有帮助。 ###...
在 Red Hat Linux 中,可以使用 cat /proc/cpuinfo 命令来查看 CPU 信息,包括逻辑 CPU 个数、物理 CPU 个数、每个物理 CPU 中的 Core 个数等信息。 Linux swap 分区扩展的三种方法 swap 空间是在位于硬盘上的,...
Linux的发行版众多,其中包括社区克隆版本如CentOS(RHEL社区版),商业发行版如Redhat,桌面版本如Fedora Core,以及Ubuntu系列。Ubuntu是Debian系列下的一款桌面操作系统,而Debian系列包括Debian本身和其衍生版...