GDB调试程序常用命令

使用GDB调试程序的一般步骤:

第一步:编译程序(-g参数告诉编译器生成调试信息)

>gcc test.c -g

第二步:运行gdb

>gdb a.exe

第三步:查看源码,l列出居首的10行代码,字母l是list的缩写,注意:这里"(gdb)"是gdb的提示符,不是我们手工键入的。

(gdb) l

第四步:加断点(字母b是break的缩写) ,这里以在第四行加断点为例。

(gdb) b 4

第五步:执行(字母r是run的缩写),因为前面的b命令把断点设在了第4行,所以执行r命令后程序执行到这里停了下来。

(gdb) r

第六步:查看调用栈

(gdb) bt  // bt是backtrace的缩写,表示回溯跟踪。#0表示当前栈帧,#1表示当前栈帧的上一个栈帧,以此类推。

(gdb) p a  // b是print的缩写,查看当前栈帧中参数a的值。

(gdb) up  // up命令选择上一个栈帧

(gdb) p a  // 查看当前栈帧中参数a的值

其它gdb常用命令:

b function // b+函数名,将断点设置在函数开头。

s  // step,执行一条语句,如果有函数调用,则进入函数内部。

n  // next,执行一条语句,如果有函数调用,则把它作为一个整体。

实际上,我们可以写一个递归程序,来比较一下一般的调用(非自身)和自身的递归调用之间的区别,可以看到,在C语言中,调用自己和调用其他函数并没有任何本质的区别,都是建立新栈帧,传递参数并修改“当前代码行”(控制转移)。在函数体执行完毕后删除栈帧,处理返回值并修改“当前代码行”。

>size a.exe 命令可以查看可执行文件中各个段的大小。一个可执行文件由text(正文段,储存指令)、data(数据段,储存已初始化的全局变量)、bbs段(储存未初始化的全局变量)组成。 在运行期调用栈被创建,其所在的段为堆栈段,和其他段一样,有自己的大小,不能越界访问,否则就会出现段错误,也就是所谓的栈溢出,由于堆栈段大小固定,因此递归调用太多或是局部变量太大都可能导致栈溢出,因此我们常常把大数组定义成全局变量。

参考资料:《算法竞赛入门经典》——刘汝佳

时间: 2024-10-11 04:21:54

GDB调试程序常用命令的相关文章

GDB的常用命令

1.直接按回车键表示,重复上一次命令 2.p i=1.改变i的变量值 3.finish 退出函数 4.gdb -c core文件 可执行文件 5.gdb 进程名 PID 6.-d 加入一个源文件的搜索路径 7.shell+命令 可以在gdb下执行shell命令 8.make 可以重新build自己的程序 9.set args 可以指定运行时参数 10.show args 可以查看设置好的运行时参数 11.path 可以设定程序的运行路径 12.show path 查询程序的运行路径 13.用at

gdb调试工具常用命令 && kdb

编译程序时需要加上-g,之后才能用gdb进行调试:gcc -g main.c -o main gdb中命令: 回车键:重复上一命令 (gdb)help:查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h (gdb)run:重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件),简写r (gdb)start:单步执行,运行程序,停在第一执行语句 (gdb)list:查看原代码(list-n,从第n行开始查看代码.list+ 函数名:查看具体函数),简写l

GDB常用命令使用说明(一)

本文由霸气的菠萝原创,转载请注明出处:http://www.cnblogs.com/xsln/p/gdb_instructions1.html 全部关于gdb的文章索引请点这里 GDB(GNU Debugger)是在Unix以及类Unix系统下的调试工具.功能极其强大,几乎涵盖了你所需要的全部功能. GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的定制要求随心所欲的运行程序. 2.可让被调试的程序在你所指定的调置的断点处停住. 3.当程序被停住时,可以检查此时你的程序中所

GDB常用命令使用

GDB(GNU Debugger)是在Unix以及类Unix系统下的调试工具.功能极其强大,几乎涵盖了你所需要的全部功能. GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的定制要求随心所欲的运行程序. 2.可让被调试的程序在你所指定的调置的断点处停住. 3.当程序被停住时,可以检查此时你的程序中所发生的事,以及内存状态等. 4.动态的改变你程序的执行环境. gdb使用总旨:help指令很强大!多用help!help里面总会有你需要的信息.如果你不知道如何使用help,请在

gdb常用命令总结

1: 对于在应用程序中加入参数进行调试的方法: 直接用 gdb app -p1 -p2 这样进行调试是不行的. 需要像以下这样使用: #gdb app (gdb) r -p1 -p2 或者在运行run命令前使用set args命令: (gdb) set args p1 p2 可以用show args 命令来查看 2. 加入断点: break <linenumber> break <funcName> break +offset break -offset (在当前行号的前面或后面的

GDB调试&mdash;&mdash;常用的命令

首先说明一点,如果我们要使用GDB来调试我们的C/C++程序时,在使用GCC编译程序时,应该带上 –g 参数, 它负责生成 与GDB相关的调试信息: 1.如何对一个文件启动GDB调试? 方法一: 命令行输入:  gdb filename 方法二: 命令行输入: gdb                 , 进行gdb工作界面以后,再输入命令: file filename             ,其中file为gdb的一个命令: 2. 常见的GDB命令: 命令 解释 示例 file <文件名>

Linux GDB常用命令一栏

Linux GDB 常用命令如下: 1.启动和退出gdb (1)启动:gdb ***:显示一段版权说明: (*** 表示可执行程序名) (2)退出:quit.有的时候输入quit后会出现相关提示:类似于“(y/n)”,输入y 2.显示和查找程序源代码 (1)list :显示10行代码,但是我为什么没有显示成功呢? (2)list 5,10:显示源文件第五行到第十行的代码 (3)list t4.c:5,10:显示源文件中第五行到第十行的代码,在跳是含有多个源文件的次序时使用: (4)list ge

再探gdb常用命令

 前面已经有了一篇对gdb常用命令的总结,见 http://blog.csdn.net/u011848617/article/details/12838875 这里对目前学过的gdb命令进行了较完整的整理. 1.使用gdb调试代码,就要在编译时添加-g选项. 2.gdb -q ------ 启动gdb时不输出版权说明 3.gdb打开文件: (1)gdb filename: (2)先输入gdb,然后在gdb命令行输入file filename. 4.gdb选项(gdb中好多命令都有自己的简写字

gdb常用命令记录

gdb常用命令 最近在研究nginx源码,gdb用于调试非常方便,之前这篇有研究过如何使用gdb调试nginx:https://www.cnblogs.com/yjf512/archive/2012/05/10/2494635.html 最近使用的时候gdb的命令又忘记了.这里复习一下. 这里有很全的资料:https://www.gitbook.com/book/wizardforcel/100-gdb-tips 常用命令 启动项目并断点 start 打临时断点 tb 打断点 b 列出代码 l