`
isiqi
  • 浏览: 16453184 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

gdb调试内存错误

阅读更多
程序在运行一段时间才出错,而且是内存错误。可能是指针访问错误。这种情况下,查找错误比较困难,可以使用core文件帮助查找错误。

$ uname -a
Linux dev 2.4.21-9.30AXsmp #1 SMP Wed May 26 23:37:09 EDT 2004 i686 i686 i386 GNU/Linux

再看看默认的一些参数,注意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文件。

没有找到core文件,我们改改ulimit的设置,让它产生。1024是随便取的,要是core文件大于1024个块,就产生不出来了。

$ ulimit -c 1024 ulimit -c unlimited

$ 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

产生core文件,可以使用gdb调试:

可执行程序是叫做bin(通常core文件就叫做bin.core),使用下面命令

1.gdb ./bin ./bin.core

2.使用bt命令看frames,假定在n

3.使用frame n调整frame

4.这个时候可以p任何argument或者local variable

调试p string这样的对象的值,可能由于过长,可以p string 的私有成员,如果p arg1.dat,这样可以通过p arg1.dat+100这样进行偏移。

这样获得了这些数据以后,我们可以将这些数据取出来,构造core的条件,单步跟踪,今天我就用这样的方法找到了一个bug。

主要使用到第二条,就可以发现错误出现位置。在core文件内容中,显示的 第一个出现在某个文件的 行数,就为该行出现的错误。仔细查看该行。之后的一些信息就是函数调用的 逐行退出。而且每个都有位置标志。
分享到:
评论

相关推荐

    GDB查找内存泄露

    Valgrind提供了一整套内存错误检测工具,包括Memcheck,它能检测内存泄露、使用未初始化的内存和内存越界等问题。LeakSanitizer是编译器插件,可以在编译时集成到程序中,提供更快速的内存泄露检测,而且无需使用GDB...

    GDB调试程序[陈皓]&GDB调试工具指南

    《GDB调试程序[陈皓]》与《GDB调试工具指南》这两份PDF文档,是深入了解和精通GDB(GNU Debugger)这一强大调试工具的重要参考资料。GDB是开源世界中广泛使用的C、C++以及其他多种语言的调试器,它允许开发者在运行...

    用GDB调试程序(整理有书签).pdf

    陈浩的《用GDB调试程序》和守望的个人博客的《GDB调试指南》这两份资料,提供了丰富的实践案例和详细的操作步骤,帮助读者从基础到进阶掌握GDB的使用技巧。通过阅读这些教程,你可以了解如何有效地使用GDB解决实际...

    Linux下gdb调试工具指南

    ### Linux下gdb调试工具指南:深入解析与实践 #### 引言 在软件开发领域,尤其是对于系统级编程和复杂应用的维护,一个高效、功能全面的调试工具是不可或缺的。GNU调试器(GDB)正是这样一款强大的调试工具,它...

    GDB基本调试原理及三种调试方式

    **GDB调试原理** GDB,全称GNU Debugger,是一个强大的源代码级调试工具,用于检查和调试C、C++等编程语言编写的程序。它的主要功能在于帮助开发者找到并修复程序中的错误(bug),以及深入理解程序的执行流程和...

    Linux GDB调试文档

    总结来看,一个合格的Linux C/C++后台开发者应该掌握GDB调试技术,利用这一强大的工具来增强开发过程中的问题诊断和解决能力。GDB的版本不断更新,其功能也在不断增强,例如在*.*.*.**版本中,特别强调了对多线程和...

    gdb调试标准教程gdb学习必备

    这篇教程是学习GDB调试的重要资源,适合嵌入式开发人员使用,因为它能够帮助理解并解决程序中的错误和问题。 GDB的基本功能包括: 1. **启动程序**:你可以通过GDB来启动你的程序,并根据需要定制运行参数,如传入...

    Ubuntu GDB调试例子

    ### Ubuntu GDB调试详解 #### 一、GDB概述 GDB(GNU Debugger)是一款功能强大的命令行程序调试工具,广泛应用于Unix/Linux操作系统环境中。它主要用于C和C++程序的调试,但也可用于其他多种语言的程序调试。GDB...

    gdb调试常用命令及调试例子

    通过《GDB调试程序.doc》文档,你将找到更多实际调试案例,包括多线程调试、内存泄漏检测等复杂场景的处理方法。文档可能还会涵盖GDB图形界面(如ddd或gdbgui)的使用,以及如何结合版本控制工具(如Git)进行调试。...

    gdb调试器的使用,gdb

    ### gdb调试器的使用 #### 一、简介与安装 GDB(GNU Debugger)是一款功能强大的开源调试工具,主要用于在Linux环境下对C/C++程序进行调试。它支持多种类型的调试操作,包括设置断点、单步执行、查看内存变量状态...

    linux下GDB调试

    GDB的设计理念充分体现了命令行工具的强大之处,即通过一系列精心设计的命令来实现对程序状态的控制和查询,从而帮助开发者定位问题并解决错误。 #### GDB 的核心功能 GDB的主要功能包括但不限于以下几个方面: 1....

    gdb调试器详解

    ### gdb调试器详解 #### 一、gdb概述与重要性 gdb(GNU Debugger)是一种功能强大的开源调试工具,广泛应用于Unix/Linux平台上的程序调试。对于任何软件开发者而言,编写无bug的代码几乎是一项不可能完成的任务。...

    gdb调试工具

    《gdb调试工具》是针对程序员和系统管理员的宝贵资源,它主要涵盖了两种经典书籍——"Debug with gdb"和"GDB完全手册"的核心内容。这两本书深入浅出地讲解了如何利用GDB(GNU Debugger)这个强大的开源调试器来解决...

    GDB调试工具指南.pdf

    《GDB调试工具指南》深度解析 一、GDB概览 GDB(GNU调试器)是GNU项目的一部分,是一款广泛使用的开源调试工具,适用于多种操作系统和编程语言,包括C、C++等。它允许开发者在程序运行时进行调试,包括设置断点、...

    linux 使用GDB调试 资料

    总之,Linux下的GDB调试技巧对于任何开发者来说都是必备技能,无论是在排查复杂问题还是优化代码性能方面,都能发挥巨大作用。通过深入学习和实践,你将能够熟练运用GDB解决各类编程挑战。这份"Debug with GDB"的...

    linux c gdb 调试工具

    以下是对GDB调试工具的详细讲解。 1. **GDB安装** 在大多数Linux发行版中,可以通过包管理器如`apt`或`yum`来安装GDB。例如,在Ubuntu上可以使用`sudo apt-get install gdb`,在CentOS/RHEL上使用`sudo yum ...

    linux gdb 调试手册

    在Linux操作系统中,GDB(GNU调试器)是一款强大的命令行工具,用于调试C、C++、Fortran、Python等编程语言编写的程序。这款工具允许开发者在运行时检查...阅读《Linux GDB调试手册》将有助于深入理解和应用这些知识。

    GDB调试工具指南

    ### GDB调试工具指南 #### 一、GDB概述与基本使用 GDB(GNU调试器)是一款功能强大的源码级程序调试工具,主要用于Linux环境下C/C++等语言的程序调试。它允许开发者在程序执行过程中设置断点、单步执行、查看变量...

Global site tag (gtag.js) - Google Analytics