`
haoningabc
  • 浏览: 1478061 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

GDB的堆栈

    博客分类:
  • gdb
gdb 
阅读更多
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#define MAX  (1UL << 20)
typedef unsigned long long u64;
typedef unsigned int u32;
u32 max_addend=MAX;
u64 sum_till_MAX(u32 n)
{
    u64 sum;
    n++;
    sum=n;
    if(n<max_addend)
        sum+=sum_till_MAX(n);
    return sum;
}
int main(int argc,char** argv){
    u64 sum=0;
    if((argc==2) && isdigit(*(argv[1])))
        max_addend=strtoul(argv[1],NULL,0);
    if(max_addend>MAX||max_addend==0){
        fprintf(stderr,"Invalid number is specified by haoningge \n");
        return 1;
    }
    sum=sum_till_MAX(0);
    printf("sum(0..%lu)=%llu\n",max_addend,sum);
    return 0;
}
~   

运行
root@ubuntu:~/gdb# ./sum  10
sum(0..10)=55
root@ubuntu:~/gdb# 


在gdb中运行
r 10 
或者
set args 10
运行带的参数,如果直接r会段错误,因为没有传值

bt
看堆栈

i r eip ebp
info register eip ebp
看寄存器的值

x/40w $sp
看栈顶指针




http://hi.baidu.com/lihui_lihux/item/b1d2e71071db8f081994ec31
---------------------------------


Let us write a program which will generate a core dump.

  #include <iostream>

  using namespace std;

  int divint(int, int);

  int main() {
    int x = 5, y = 2;
    cout << divint(x, y);
    x =3; y = 0;
    cout << divint(x, y);
    return 0;
  }

  int divint(int a, int b)
  {
    return a / b;
  } 


To enable debugging, the program must be compiled with the -g option.

  $g++ -g crash.cc -o crash
NOTE: We are using g++ compiler because we have used C++ source code.

Now, when run this program on your linux machine, it produces the result:

  Floating point exception (core dumped)
You will find a core file in your current directory.

Now to debug the problem, start gdb debugger at command prompt:

$gdb crash
    # Gdb prints summary information and then the (gdb) prompt

    (gdb) r
    Program received signal SIGFPE, Arithmetic exception.
    0x08048681 in divint(int, int) (a=3, b=0) at crash.cc:21
    21        return a / b;
    # 'r' runs the program inside the debugger
    # In this case the program crashed and gdb prints out some
    # relevant information.  In particular, it crashed trying
    # to execute line 21 of crash.cc.  The function parameters
    # 'a' and 'b' had values 3 and 0 respectively.

    (gdb) l
    # l is short for 'list'.  Useful for seeing the context of
    # the crash, lists code lines near around 21 of crash.cc

    (gdb) where
    #0  0x08048681 in divint(int, int) (a=3, b=0) at crash.cc:21
    #1  0x08048654 in main () at crash.cc:13
    # Equivalent to 'bt' or backtrace.  Produces what is known
    # as a 'stack trace'.  Read this as follows:  The crash occurred
    # in the function divint at line 21 of crash.cc.  This, in turn,
    # was called from the function main at line 13 of crash.cc

    (gdb) up
    # Move from the default level '0' of the stack trace up one level
    # to level 1.

    (gdb) list
    # list now lists the code lines near line 13 of crash.cc

    (gdb) p x

    # print the value of the local (to main) variable x
In this example, it is fairly obvious that the crash occurs because of the attempt to divide an integer by 0.

To debug a program 'crash' that has crashed and produced a core file named 'core', type the following at the command line:

   gdb crash core 

As this is mostly equivalent to starting gdb and typing the 'r' command, all of the commands above could now be used to debug the file.
分享到:
评论

相关推荐

    gdb调试信息堆栈信息

    本文将深入探讨GDB如何处理和解析调试信息堆栈,帮助开发者更好地理解和解决代码中的问题。 一、GDB简介 GDB是一款开源的、跨平台的调试器,它允许程序员在程序运行时检查其内部状态,包括变量值、内存空间、调用...

    Linux中gdb查看core堆栈信息

    如果工程很大,头文件很多,而有几个头文件又经常要用的,那么: 1、把这些头文件全部写到一个头文件中,比如:preh.h 2、写一个preh.c,里面的包含库文件,只要一句话#include"preh.h" 3、对于preh.c,在project ...

    堆栈溢出调试-gdb-例子

    通过列举linux平台下的例子,并结合gdb描述了堆栈溢的过程。

    gdb完全手册.pdf.zip_GDB pdf_GDB中文手册_gdb_linux_linux gdb pdf

    GDB(GNU Debugger)是GNU项目的一个组成部分,是一款强大的源代码级调试器,适用于C、C++、Fortran、Objective-C、Python等语言。这款工具允许程序员在运行代码时检查程序的状态,包括变量值、内存区域、调用堆栈等...

    gdb64.exe和gdb.exe

    4. **回溯堆栈**:使用`backtrace`命令查看调用堆栈,帮助理解程序执行路径。 5. **自动完成**:GDB支持命令和变量的自动补全功能,提高效率。 6. **脚本支持**:可以使用Python编写GDB宏或扩展,实现更复杂的调试...

    包括gdb64.exe和gdb.exe

    GDB,全称为GNU调试器(GNU Debugger),是开源社区GNU项目的一部分,是一个强大的命令行工具,用于调试C、C++、Fortran等语言编写的程序。它允许开发者在程序运行时检查和控制程序状态,如查看内存变量、设置断点、...

    gdb手册debuging with gdb 中文

    ### GDB手册知识点详解 #### 一、GDB简介与手册背景 GNU调试器(GDB)是一款功能强大的源码级调试工具,适用于多种编程语言,包括但不限于C、C++等。该手册针对的是GDB的第六版,版本号为6.8.50.20090706,提供了...

    virtual gdb vs2022可用

    - 调试辅助:包括断点、变量查看、调用堆栈、内存查看等功能。 - 源码级调试:即使程序在远程设备上运行,也能实现源代码级别的调试。 总结来说,这个主题涉及的是如何在Visual Studio 2022中使用VisualGDB这一插件...

    GDB调试完整文档

    比较全面的GDB调试使用文档。 GDB概述 使用GDB GDB的命令概貌 GDB中运行UNIX的shell程序 在GDB中运行程序 调试已运行的程序 暂停 / 恢复程序运行 一、设置断点(BreakPoint) 二、设置观察点(WatchPoint)...

    gdb-6.0.rar_gdb_gdb-6_gdb-6.6

    4. **调用堆栈**:GDB提供查看调用堆栈的功能,帮助追踪函数调用关系,了解程序执行路径。 5. **变量观测**:可以监视特定变量的变化,每当其值发生变化时,GDB会给出提示。 6. **命令脚本**:通过GDB的命令脚本...

    STM32 GDB调试手册

    GDB 的基本概念包括断点、变量、寄存器、堆栈等。 4. 如何设置断点?设置断点可以使用 break 命令,例如 break main 设置断点在 main 函数的入口处。 5. 如何查看变量值?查看变量值可以使用 print 命令,例如 print...

    GDB使用手册(中文版)

    **GDB使用手册(中文版)** GDB(GNU调试器)是开源世界中最常用的调试器之一,尤其在Linux环境中,它为C、C++、Fortran等编程语言提供了强大的调试支持。本手册将深入介绍如何有效地利用GDB进行程序调试,帮助开发者...

    ubuntu20.04对应的gdb安装包

    5. **调用堆栈**:查看调用函数的堆栈信息,了解函数调用关系。 6. **运行控制**:启动、停止、继续、跳过、退出程序执行。 7. **支持多种编程语言**:GDB支持C、C++、Fortran、Objective-C、Pascal等多种编程语言。...

    gdb.exe文件

    它允许程序员设置断点、单步执行代码、检查变量值、跟踪调用堆栈等,从而帮助找出程序中的错误。 描述中提到,在使用OpenCV(一个流行的开源计算机视觉库)时,可能需要在连接的MinGW(Minimalist GNU for Windows...

    最新gdb8.1和gdb7.7

    GDB还支持许多高级功能,如条件断点、显示内存区域、跟踪点、堆栈回溯、动态改变变量值、远程调试等。对于大型项目,了解并熟练使用GDB能够极大地提高开发效率和代码质量。 总之,GDB是一个强大且灵活的调试工具,...

    Linux绿色gdb,无需安装,支持c++对象

    GDB允许程序员在执行程序时设置断点、单步执行、查看变量值、检查内存状态、跟踪调用堆栈等。这对于查找和修复程序中的错误至关重要。尤其是在处理复杂的问题,如内存泄漏、未初始化的变量或者多线程同步问题时,GDB...

    gdb.zip gdb源码

    它允许程序员在程序运行时检查其内部状态,包括变量值、内存区域、堆栈跟踪以及指令执行等,从而帮助定位和修复代码中的错误。GDB支持多种操作系统,如Linux、Unix、Windows等,是软件开发过程中的重要辅助工具。 ...

    gdb调试 rk可运行程序

    4. **检查堆栈**: `backtrace`或`bt`命令用于显示调用堆栈,帮助理解函数调用的顺序。 5. **继续执行**: 使用`continue`命令会让程序从当前位置继续运行,直到遇到下一个断点或程序结束。 6. **条件断点**: 可以...

Global site tag (gtag.js) - Google Analytics