#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是一款开源的、跨平台的调试器,它允许程序员在程序运行时检查其内部状态,包括变量值、内存空间、调用...
如果工程很大,头文件很多,而有几个头文件又经常要用的,那么: 1、把这些头文件全部写到一个头文件中,比如:preh.h 2、写一个preh.c,里面的包含库文件,只要一句话#include"preh.h" 3、对于preh.c,在project ...
通过列举linux平台下的例子,并结合gdb描述了堆栈溢的过程。
GDB(GNU Debugger)是GNU项目的一个组成部分,是一款强大的源代码级调试器,适用于C、C++、Fortran、Objective-C、Python等语言。这款工具允许程序员在运行代码时检查程序的状态,包括变量值、内存区域、调用堆栈等...
4. **回溯堆栈**:使用`backtrace`命令查看调用堆栈,帮助理解程序执行路径。 5. **自动完成**:GDB支持命令和变量的自动补全功能,提高效率。 6. **脚本支持**:可以使用Python编写GDB宏或扩展,实现更复杂的调试...
GDB,全称为GNU调试器(GNU Debugger),是开源社区GNU项目的一部分,是一个强大的命令行工具,用于调试C、C++、Fortran等语言编写的程序。它允许开发者在程序运行时检查和控制程序状态,如查看内存变量、设置断点、...
### GDB手册知识点详解 #### 一、GDB简介与手册背景 GNU调试器(GDB)是一款功能强大的源码级调试工具,适用于多种编程语言,包括但不限于C、C++等。该手册针对的是GDB的第六版,版本号为6.8.50.20090706,提供了...
- 调试辅助:包括断点、变量查看、调用堆栈、内存查看等功能。 - 源码级调试:即使程序在远程设备上运行,也能实现源代码级别的调试。 总结来说,这个主题涉及的是如何在Visual Studio 2022中使用VisualGDB这一插件...
比较全面的GDB调试使用文档。 GDB概述 使用GDB GDB的命令概貌 GDB中运行UNIX的shell程序 在GDB中运行程序 调试已运行的程序 暂停 / 恢复程序运行 一、设置断点(BreakPoint) 二、设置观察点(WatchPoint)...
4. **调用堆栈**:GDB提供查看调用堆栈的功能,帮助追踪函数调用关系,了解程序执行路径。 5. **变量观测**:可以监视特定变量的变化,每当其值发生变化时,GDB会给出提示。 6. **命令脚本**:通过GDB的命令脚本...
GDB 的基本概念包括断点、变量、寄存器、堆栈等。 4. 如何设置断点?设置断点可以使用 break 命令,例如 break main 设置断点在 main 函数的入口处。 5. 如何查看变量值?查看变量值可以使用 print 命令,例如 print...
**GDB使用手册(中文版)** GDB(GNU调试器)是开源世界中最常用的调试器之一,尤其在Linux环境中,它为C、C++、Fortran等编程语言提供了强大的调试支持。本手册将深入介绍如何有效地利用GDB进行程序调试,帮助开发者...
5. **调用堆栈**:查看调用函数的堆栈信息,了解函数调用关系。 6. **运行控制**:启动、停止、继续、跳过、退出程序执行。 7. **支持多种编程语言**:GDB支持C、C++、Fortran、Objective-C、Pascal等多种编程语言。...
它允许程序员设置断点、单步执行代码、检查变量值、跟踪调用堆栈等,从而帮助找出程序中的错误。 描述中提到,在使用OpenCV(一个流行的开源计算机视觉库)时,可能需要在连接的MinGW(Minimalist GNU for Windows...
GDB还支持许多高级功能,如条件断点、显示内存区域、跟踪点、堆栈回溯、动态改变变量值、远程调试等。对于大型项目,了解并熟练使用GDB能够极大地提高开发效率和代码质量。 总之,GDB是一个强大且灵活的调试工具,...
GDB允许程序员在执行程序时设置断点、单步执行、查看变量值、检查内存状态、跟踪调用堆栈等。这对于查找和修复程序中的错误至关重要。尤其是在处理复杂的问题,如内存泄漏、未初始化的变量或者多线程同步问题时,GDB...
它允许程序员在程序运行时检查其内部状态,包括变量值、内存区域、堆栈跟踪以及指令执行等,从而帮助定位和修复代码中的错误。GDB支持多种操作系统,如Linux、Unix、Windows等,是软件开发过程中的重要辅助工具。 ...
4. **检查堆栈**: `backtrace`或`bt`命令用于显示调用堆栈,帮助理解函数调用的顺序。 5. **继续执行**: 使用`continue`命令会让程序从当前位置继续运行,直到遇到下一个断点或程序结束。 6. **条件断点**: 可以...