GDB 程序调试简单实践

用了好久的GCC/G++ 却一直都没用过GDB调试过程序,有时程序不是很大,一般有错,直接看编译器编译结果就差不多知道错在哪儿了,或者使用codeblocks单步调试,甚至回到windows下面调试,但是总是不太方便,因此有必要看一下GDB调试方法和基本步骤.

下面是一个简单的演示:

首先创建一个有错误的代码,如下:

这个程序很简单,目的是接受用户的输入,并将用户的输入回应输出来.

但是这个程序的第17行有个错误,使用了未初始化的字符指针name,因此编译运行后会出现段错误,如下:

下面利用GDB 工具查找该程序中的出现的问题,步骤如下:

FIR:

运行gdb bug命令,装入上面的可执行文件:

使用list命令(或者l)命令查看代码:

使用run命令:

输出三行结果:

1:出现段错误

2:提示错误的位置

使用where命令查看程序出错位置:

以上信息说明gets函数出错,从代码可以看出,唯一可能出错的是name变量,因此通过print命令查看name变量:

由此可知,出错的原因是使用了未初始化的变量name.

退出gdb.

简单的演示了一下.具体的其他的调试手段见后续.

GDB 程序调试简单实践

时间: 2024-11-06 07:14:54

GDB 程序调试简单实践的相关文章

001编程基础----GDB程序调试

一.GDB是GNU发布的程序调试工具.有三方面功能: 1.启动被调试程序. 2.让被调试程序在指定位置停住. 3.当程序被停住时,可以检查程序状态(如变量值). 二.GDB调试步骤: 1.编译生成可执行文件 gcc -g hell.c -o hello 2.启动GDB gdb hello 3.在main函数处设置断点 break main(或b main) 4.运行程序 run 5.单步 next 6.继续运行 continue(或c) 7.退出GDB   quit 三.GDB命令的常用操作 l

1、GDB程序调试

GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具.一般来说GDB主要完成下面四个部分的功能. 1)启动你的程序,可以按照你的自定义的要求运行程序. 2)可让被调试程序在你所指定的调试的断点处停住(断点可以使条件表达式). 3)当程序被停住时.可以检查此时你的程序中所发生的事,包括查看当前状态下程序中指定变量的值. 4)动态的改变你程序的执行环境. 步骤: 1.先使用vi编辑器编辑文件test.c,用于GDB调试器调试. 2.使用命令gcc -g test.c -o test,编译

gdb,程序调试助手

启动GDB:(其中我的app是编译之后的可执行文件) 退出命令:quit或者简写q 帮助获取: gdb通过完备的在线帮助,使我们使用起来更加方便.所有的帮助信息都是通过help命令获得的,运行help命令时,如果不指定参数,gdb将输出分类信息: 可以通过分类名作为help指定的参数来获得帮助,以断点(breakpoint)为例: 在gdb调试中,有几个注意点可以提高调试效率,第一,如果输入的命令开头字母能唯一标识这个命令,则后面的命令可以不用输入,例如退出命令quit,只输入q就已经是唯一标识

【系统篇】从int 3探索Windows应用程序调试原理

探索调试器下断点的原理 在Windows上做开发的程序猿们都知道,x86架构处理器有一条特殊的指令——int 3,也就是机器码0xCC,用于调试所用,当程序执行到int 3的时候会中断到调试器,如果程序不处于调试状态则会弹出一个错误信息,之后程序就结束.使用VC开发程序时,在Debug版本的程序中,编译器会向函数栈帧中填充大量的0xCC,用于调试使用.因此,经常我们的程序发生缓冲区溢出时,会看到大量的“烫烫烫…”,这是因为“烫”的编码正是两个0xCC. 那么?为什么int 3可以让程序中断到调试

针对 Linux 环境下 gdb 动态调试获取的局部变量地址与直接运行程序时不一致问题的解决方案

基础的缓冲区溢出实践通常需要确定运行状态下程序中的某些局部变量的地址,如需要确定输入缓冲区的起始地址从而获得注入缓冲区中的机器指令的起始地址等.在 Linux 环境下,可通过 gdb 对程序进行动态调试,从而获得程序运行状态下的信息( 关闭 ALSR 机制 ),基础的 gdb 操作可参见笔者的文章Linux下编辑.编译.调试命令总结--gcc和gdb描述.使用 gdb 可以方便的获取程序动态运行状态下的信息,但通过 gdb 动态调试获取的诸如缓冲区的起始地址等信息可能与程序实际运行时的信息并不相

3、利用GDB进行程序调试

本文将用一个实际例子讲解如何通过GDB进行程序调试. 首先,我们需要理解的是GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,其产生和调试的目的是让调试者知道,程序在执行时内部发生了什么,或者运行过程中在做什么,一般来说,GDB主要帮助实现以下四个方面的功能. 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序.    2.可让被调试的程序在你所指定的调置的断点处停住.(断点可以是条件表达式)    3.当程序被停住时,可以检查此时你的程序中所发生的事.    4.动态的

Linux下C/C++程序调试基础(GCC,G++,GDB,CGDB,DDD)

在写程序的时候,经常会遇到一些问题,比如某些变量计算结果不是我们预期的那样,这时我们需要对程序进行调试.本文主要介绍调试C/C++在Linux操作系统下主要的调试工具. 在Linux下写程序,C/C++主要的编译器有GCC/G++,ICC等,像我等穷码农,最喜欢GCC了,很大原因是他免费!所以,我们以GCC/G++为例介绍主要的调试工具. 分以下几个内容介绍: 1.调试之前的工作 2.选择调试工具 3.调试步骤 点我,请帮我投一票! 调试之前的工作 编译器在编译阶段需要产生可供调试的代码,才能被

使用 GNU GCC 和 GDB 开发调试应用程序

gcc 命令的使用 在使用GCC编译程序时,编译过程可以被细分为四个阶段: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking) 如果不加任何参数, gcc 默认执行所有的操作,直接生成可执行文件. 以上四个阶段对应参数为: 1.        -E  只执行预处理 2.        –S  只编译,不汇编和链接 3.        –c  编译汇编不链接 4.        –o  链接成目标文件 GCC常用选项 -c 通知

windows下使用MinGW的调试工具gdb.exe调试C程序

1.编译源代码 C:MinGW\bin>gcc.exe -g -o program.exe program.c 编译选项上要加上“g”,这样生成的目标程序会含有调试内容,再用gdb调试的时候才能使用.显然加上“g”选项生成的应用程序会比不加的大,但两者运行时没有差别. 2.启动调试 C:MinGW\bin>gdb.exe program.exe 3.设置断点并启动运行 (gdb)break main(gdb)start 不能直接start,因为程序运行太快了,直接start就运行到程序停止的地