gdb core

程序运行发生异常退出,比如segment错误,此时可以利用系统生成的core文件,配合GDB来定位问题。

问题程序

segment.c

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>

void func()
{
  char *p = NULL;

  *p = 3;
}

main()
{
  func();

  return;
}
  1. gcc -g -o segment segment.c

Core文件:

1. 查看系统是否允许生成core文件

[plain] view plaincopy

  1. #ulimit -a
  2. core file size          (blocks, -c) 0

core文件大小限制为0,不能生成core文件。

2. 使用如下命令取消限制,使系统能生成core文件

[plain] view plaincopy

  1. ulimit -c unlimited

或者指定core文件大小,如1K

[plain] view plaincopy

  1. ulimit -c 1024

执行程序:

  1. # ./segment
  2. egmentation fault (core dumped)

在程序当前目录下生成了core文件

gdb调试:

# gdb ./segment core
GNU gdb (GDB) 7.1-ubuntu
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/duanbb/test/segment/segment...done.
[New Thread 3655]

warning: Can‘t read pathname for load map: Input/output error.
Reading symbols from /lib/tls/i686/cmov/libc.so.6...Reading symbols from /usr/lib/debug/lib/tls/i686/cmov/libc-2.11.1.so...done.
done.
Loaded symbols for /lib/tls/i686/cmov/libc.so.6
Reading symbols from /lib/ld-linux.so.2...Reading symbols from /usr/lib/debug/lib/ld-2.11.1.so...done.
done.
Loaded symbols for /lib/ld-linux.so.2
Core was generated by `./segment‘.
Program terminated with signal 11, Segmentation fault.
#0  0x080483c4 in func () at segment.c:10
10      *p = 3;

release版如何调试看:http://blog.csdn.net/duanbeibei/article/details/6923716

时间: 2024-08-01 11:19:16

gdb core的相关文章

GDB Core,gdb 调试大全,core文件调试

编译: gcc -g -o hello hello.c gdb 调试: 基本 gdb 命令. 命 令 描 述 小结:常用的gdb命令 backtrace 显示程序中的当前位置和表示如何到达当前位置的栈跟踪(同义词:where) breakpoint 在程序中设置一个断点 cd 改变当前工作目录 clear 删除刚才停止处的断点 commands 命中断点时,列出将要执行的命令 continue 从断点开始继续执行 delete 删除一个断点或监测点:也可与其他命令一起使用 display 程序停

GDB + core 文件调试程序

https://segmentfault.com/a/1190000002703073 生成CORE文件并调试core 文件调试程序文件: 查看系统CORE文件设置:ulimit -a core file size 0说明没打开core  (程序出错崩溃系统记录程序的上下问 内存 cpu等信息供调试) 打开CORE文件:ulimit -c unlimited 或者ulimit -c 1000 禁用:ulimit -c 0 调试CORE文件: gdb programbin corefile >wh

gdb core文件函数出现问号

原创地址 http://blog.csdn.net/yudingding6197/article/details/5528989 我的程序crash,有了coredump文件,在Linux PC上用arm-linux-gdb debug it. The result is: #0  0x4022b178 in ?? ()(gdb) bt#0  0x4022b178 in ?? ()#1  0x4022b134 in ?? ()#2  0x4022b134 in ?? ()Backtrace st

GDB core命令的使用调试段错误

#include <stdio.h> void func(){ int *p = NULL; printf("*p:%d\n", *p);//断错误 } int main(void){ func(); return 0; } 1.首先设置开关 设置 core文件的大小为1000K存放数据 [[email protected] clession]$ ulimit -c0[[email protected] clession]$ ulimit -c 1000 2. 编译-g调试

Linux下交叉编译gdb,gdbserver+gdb的使用以及通过gdb调试core文件

交叉编译gdb和gdbserver 1.下载gdb:下载地址为:http://ftp.gnu.org/gnu/gdb/按照一般的想法,最新版本越好,因此下载7.2这个版本.当然,凡事无绝对.我们以gdb-7.2.tar.bz2 这个文件为例.2.解压缩: $ tar jxvf gdb-7.2.tar.bz2 注:小技巧:Linux下一般压缩文件后缀为.tar.bz2和.tar.gz,它们解压命令有两三个选项是一致的: xf(v),前者再加上j选项,后者再加上z选项. 3.进入该目录 $ cd g

[skill][debug][gdb] 使用core dump 进行GDB

core dump 扫盲:https://wiki.archlinux.org/index.php/Core_dump 1.  人为制作 core dump 1.1  实时在线生成core dump.进程不会停止. [[email protected] ~]# pgrep KingKong 3850 [[email protected] ~]# gdb (gdb) attach 3850 (gdb) generate-core-file Saved corefile core.3850 (gdb

gdb调试命令

本篇摘自互联网,纯属自己学习笔记,然分享给看到我的博客的人们. 用GDB调试程序 GDB是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本.UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能. 于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能.而Windows下的图形软件基本上是各自为营,

linux gdb基本概念

GDB是一个功能强大的调试器,它是一个自由软件,能够用在许多UNIX平台上.它同时也是Linux系统中的默认调试器.GDB已被移植到许多其他的计算机平台上,并且能够用于调试嵌入式实时系统.一般来说,GDB主要可以帮助我们完成以下四个方面的功能:  1, 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序. 2,可以让被调试的程序在你所指定的断点处停住.  3, 当程序被停住时,可以检查此时你的程序中所发生的事情. 4, 动态的改变你程序的执行环境.  与图形化的调试工具相比,GDB具有如下

gdb Debug

源码会进行行号提示. 如果需要查看在其他文件中定义的函数,在l后加上函数名即可定位到这个函数的定义及查看附近的其他源码.或者:使用断点或单步运行,到某个函数处使用s进入这个函数. 3)设置断点 (gdb) b 6 这样会在运行到源码第6行时停止,可以查看变量的值.堆栈情况等:这个行号是gdb的行号. 4)查看断点处情况 (gdb) info b 可以键入"info b"来查看断点处情况,可以设置多个断点: 5)运行代码 (gdb) r 6)显示变量值 (gdb) p n 在程序暂停时,