`
isiqi
  • 浏览: 16080902 次
  • 性别: 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调试流程及命令大全

    GDB(GNU调试器)是一种...除了基本调试功能外,GDB还支持高级功能,如内存分析、线程调试、远程调试等等。需要注意的是,在使用GDB过程中,您需要确保采取适当的安全措施,以避免程序运行过程中可能出现的不良影响。

    Openwrt中通过gdb工具定位内核panic错误位置

    Openwrt中通过gdb工具定位内核panic错误位置,快速定位内核内存越界代码位置,节约调试时间。

    GDB(GNU Debugger)调试器工具

    GDB(GNU Debugger)是一个强大的调试器工具,主要用于调试程序的错误和问题。它是GNU项目的一部分,支持多种编程语言,包括C、C++、Fortran等。GDB提供了一组命令和功能,允许开发人员在程序运行时检查和分析程序...

    Linux下如何使用gdb调试core文件

    使用gdb调试core文件,可以帮助我们快速定位程序出现段错误的位置。当然,可执行程序编译时应加上-g编译选项,生成调试信息。 当程序访问的内存超出了系统给定的内存空间,就会产生Segmentation fault (core dumped)...

    Linux环境下段错误的产生原因及调试方法小结

    段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。这里贴一个对于“段错误”的准确...

    CUDA-Memcheck用户手册4.0中文版

    CUDA调试工具cuda-gdb,包含一个可以在CUDA中检测和调试内存错误的内存检查特性。该文档描述了这个名为cuda-memcheck的工具与它的功能。 NVIDIA用它强大的cuda-gdb硬件调试器简化了CUDA程序错误的调试。然而,每个...

    软件调试的艺术

    (高清带目录)调试对于软件的...书中不但配合实例讨论了如何管理内存、理解转储内存、跟踪程序找出错误等内容,更涵盖了其他同类书忽略的主题,例如线程、客户 /服务器、GUI和并行程序,以及如何躲开常见的调试陷阱。

    valgrind调试工具

    arm-linux版本的调试工具,可用来调试内存泄漏或段错误,个人感觉比gdb好用。免安装下载后直接解压根目录即可,解压及执行命令如下: 解压: tar -xzvf valgrind.tgz -C / 执行: valgrind ./xxx

    大内高手--调试手段及原理

    知其然也知其所以然,是我们《大内高手》系列一贯做法,本文亦是如此。...问题在于,理想情况并不存在,现实中存在着大量有内存错误的程序,如果内存错误很容易避免,JAVA/C#的优势将不会那么突出了。

    内存调试工具

    electric fence 很好用的内存调试工具,能调试malloc所分配的内存错误 解压文件以后 安装方法 make -f Makefile install 使用方法 gcc -g -Wall -o test test.c -lefence -lpthread 调试方法 gdb test >run

    linux下C++和Qt生成和调试Core文件(3)

    程序员可以使用调试工具如GDB来分析Core文件,以确定程序崩溃的原因。通过分析Core文件,程序员可以了解程序在崩溃前发生的情况,包括变量的值,函数调用的堆栈信息等,从而找到程序中的错误。 Core文件还可用于...

    操作系统(内存管理)

    文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存,以及如何使用垃圾收集自动管理内存。 为什么必须管理内存 内存管理是计算机编程最为基本的...

    互联网程序员都每天刷题嘛-tools:基本分析和调试技术介绍

    调试:识别并消除软件中的错误 分析:程序分析。 测量诸如 时间复杂度 内存使用 函数调用的频率和持续时间 调试 我们将使用gdb ,GNU 项目调试器。 要查看命令的简明列表,请查看 a 在以下代码中,我们使用快捷方式s...

    my_gperftools-2.0.tar.gz

    推荐使用工具gdb+gperftools gperftools下载和安装 参考 ... make 安装过程中如果提示错误 src/base/linuxthreads.cc: 在函数‘void ListerThread(ListerParams*)’中: ...使用gdb调试,在越界的地方就会停下来。

    r-debug:带有多个R版本的Dockerfile,用于内存线程调试

    用于调试R内存问题的Docker映像有关诊断与R接口的C和C ++代码中的错误的详细信息,请参见 。 该存储库包含一个用于创建Docker映像的wch1/r-debug , wch1/r-debug其中包含以下工具和R的构建: gdb valgrind R : R的...

    EmBitz 2.00 免费而强大的ARM开发工具,替换KEIL等IDE

    EBlink 用作主要调试工具,其他仅用作远程 GDB(可选自动启动) STmicro 向导由 EmBitz 用户 Mink 更新,非常感谢! 现在有一个用于调试的热插拔菜单 现在有一个 Flash 菜单来刷新目标或转储目标内存 有很多错误修复...

    bomblab的概要介绍与分析

    参与者需利用如GDB这样的调试器,深入剖析二进制代码,跟踪程序执行流程,理解每个阶段内部的逻辑,从而推理出正确的输入字符串。这不仅考验学生的编程基础,还要求具备阅读和理解汇编代码的能力,以及利用调试技巧...

    黑客反汇编揭秘(第二版).part2.rar

    8.2 用GDB调试二进制文件 133 8.2.1 准备进行文件调试 133 8.2.2 跟踪前的准备 138 第9章 Linice内核调试基础 141 9.1 系统要求 142 9.2 编译与配置Linice 143 9.3 引导系统与启动调试器 144 9.4 Linice的...

    log2mem:CC ++高速低延迟轻量级内存映射诊断记录器

    使用调试器(例如gdb)单步执行代码将大大降低执行速度。 因此,如果仅当其线程以正常速度交互时才出现错误,则通常通过降低程序速度来抑制该错误。 同样,printf / std :: cout语句也有成本; 字符串被构造并写入...

Global site tag (gtag.js) - Google Analytics