GDB 常用调试命令

合集下载

gdb调试常用命令

gdb调试常用命令
1
8 9 10
删除所有断点 使断点无效 使断点有效
delete break
不需要参数
disable break <index> disable break 3:使序号为 3 的断点无效 enable break <index> enable break 3:使序号为 3 的断点有效 run:运行程序 run 12 34:带 12 和 34 两个参数运行程序 说明: run 12 34 等价于先执行 set args 12 34,然后执行 run print x:打印变量 x 的值 whatis x:打印变量 x 的类型 说明: ptype:比 whatis 的功能更强,他可以提供一个结构的定义 不需要参数 不需要参数 不需要参数 list <line1>显示程序第line1行的周围的源程序 list <line1,line2>显示第line1行到line2行之间的源代码 list <function> 显示函数名为function的函数的源程序 list 显示当前行4 15 16
打印变量值 打印变量类型 单步运行 (不进入) 单步运行(进入) 运行到断点
print <variable> whatis <variable> next step continue
17
显示源码
list
付春启 2011 年 2 月 23 日
2
gdb 调试常用命令
No. 1 功能 启动 gdb 程序 gdb 命令 用法举例(以调试程序 calc 为例) gdb:启动 gdb 调试程序 gdb ./calc:启动 gdb 调试程序,并载入 calc 文件中的符号列表 file ./calc:载入 calc 文件中的符号列表 2 载入文件符号表 打开或关闭源代码 窗口 设置程序运行参数 file <filename> 说明: gdb ./calc 等价于先执行 gdb,再执行 file ./calc 3 4 Ctrl+X+A set args 窗口切换快捷键 set args 12 34:设置程序运行参数为 12 和 34 两个参数 set args:取消先前所有参数设置 break 100:在第 100 行设置一个断点(单文件情况) break add:在 add 函数入口设置一个断点(单文件情况) 5 设置断点 break break main.cpp:100:在 main.cpp 文件的第 100 行设置一个断点(多文件 情况) break main.cpp:add :在 main.cpp 文件中的 add 函数入口设置一个断点( 多 文件情况) 6 7 查看断点信息 删除一个断点 info break delete break <index> 不需要参数 delete break 2:删除序号为 2 的断点

GDB常用命令

GDB常用命令

GDB常用命令在linux的c编程中大家经常用gdb调试程序,以下是一些常用的指令1.break FUNCTION在某个函数上设置断点。

函数重载时,有可能同时在几个重载的函数上设置了断点break +OFFSETbreak -OFFSET在当前程序运行到的前几行或后几行设置断点break LINENUM在行号为LINENUM的行上设置断点break FILENAME:LINENUM在文件名为FILENAME的原文件的第LINENUM行设置断点break FILENAME:FUNCTION在文件名为FILENAME的FUNCTION函数上设置断点当你的多个文件中可能含有相同的函数名时必须给出文件名。

break *ADDRESS在地址ADDRESS上设置断点,这个命令允许你在没有调试信息的程序中设置断点break当break命令不包含任何参数时,break命令在当前执行到的程序运行栈中的下一条指令上设置一个断点。

除了栈底以外,这个命令使程序在一旦从当前函数返回时停止。

相似的命令是finish,但finish并不设置断点。

这一点在循环语句中很有用。

gdb在恢复执行时,至少执行一条指令。

break ... if COND这个命令设置一个条件断点,条件由COND指定;在gdb每次执行到此断点时COND都被计算当COND的值为非零时,程序在断点处停止ignore BNUM COUNT设置第BNUM号断点的被忽略的次数为COUNT,即断点BNUM 再执行到第COUNT+1次时程序停止tbreak ARGS 或者简写为 tb设置断点为只有效一次。

ARGS的使用同break中的参量的使用hbreak ARGS设置一个由硬件支持的断点。

这个命令的主要目的是用于对EPROM/ROM程序的调试因为这条命令可以在不改变代码的情况下设置断点。

这可以同SPARCLite DSU一起使用。

当程序访问某些变量和代码时,DSU将设置“陷井”。

gdb调试器命令总结

gdb调试器命令总结

gdb调试器命令总结Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具。

和所有常用的调试工具一样,gdb提供了以下功能:# 监视程序中变量的值# 在程序中设置断点# 程序的单步执行在使用gdb前,必须先载入可执行文件,因为要进行调试,文件中就必须包含调试信息,所以在用gcc或cc编译时就需要用-g参数来打开程序的调试选项。

调试开始时,必须先载入要进行调试的程序,可以用以下两种方式:* 在启动gdb后执行以下命令:file 可执行文件路径* 在gdb启动时就载入程序:gdb可执行文件路径载入程序后,接下来就是要进行断点的设置,要监视的变量的添加等工作,下面对在这个过程中常会用到的命令逐一进行介绍:* list:显示程序中的代码,常用使用格式有:list输出从上次调用list命令开始往后的10行程序代码。

list -输出从上次调用list命令开始往前的10行程序代码。

list n输出第n行附近的10行程序代码。

list function输出函数function前后的10行程序代码。

* forward/search:从当前行向后查找匹配某个字符串的程序行。

使用格式:forward/search 字符串查找到的行号将保存在$_变量中,可以用print $_命令来查看。

* reverse-search:和forward/search相反,向前查找字符串。

使用格式同上。

* break:在程序中设置断点,当程序运行到指定行上时,会暂停执行。

使用格式:break 要设置断点的行号* tbreak:设置临时断点,在设置之后只起作用一次。

使用格式:tbreak 要设置临时断点的行号* clear:和break相反,clear用于清除断点。

使用格式:clear 要清除的断点所在的行号* run:启动程序,在run后面带上参数可以传递给正在调试的程序。

经典的GDB调试命令,包括查看变量,查看内存

经典的GDB调试命令,包括查看变量,查看内存

经典的GDB调试命令,包括查看变量,查看内存经典的GDB调试命令,包括查看变量,查看内存在你调试程序时,当程序被停住时,你可以使⽤print命令(简写命令为p),或是同义命令inspect来查看当前程序的运⾏数据。

print命令的格式是:printprint /是表达式,是你所调试的程序的语⾔的表达式(GDB可以调试多种编程语⾔),是输出的格式,⽐如,如果要把表达式按16进制的格式输出,那么就是/x。

⼀、表达式print和许多GDB的命令⼀样,可以接受⼀个表达式,GDB会根据当前的程序运⾏的数据来计算这个表达式,既然是表达式,那么就可以是当前程序运⾏中的const常量、变量、函数等内容。

可惜的是GDB不能使⽤你在程序中所定义的宏。

表达式的语法应该是当前所调试的语⾔的语法,由于C/C++是⼀种⼤众型的语⾔,所以,本⽂中的例⼦都是关于C/C++的。

(⽽关于⽤GDB 调试其它语⾔的章节,我将在后⾯介绍)在表达式中,有⼏种GDB所⽀持的操作符,它们可以⽤在任何⼀种语⾔中。

@是⼀个和数组有关的操作符,在后⾯会有更详细的说明。

::指定⼀个在⽂件或是⼀个函数中的变量。

{}表⽰⼀个指向内存地址的类型为type的⼀个对象。

⼆、程序变量在GDB中,你可以随时查看以下三种变量的值:1. 全局变量(所有⽂件可见的)2. 静态全局变量(当前⽂件可见的)3. 局部变量(当前Scope可见的)如果你的局部变量和全局变量发⽣冲突(也就是重名),⼀般情况下是局部变量会隐藏全局变量,也就是说,如果⼀个全局变量和⼀个函数中的局部变量同名时,如果当前停⽌点在函数中,⽤print显⽰出的变量的值会是函数中的局部变量的值。

如果此时你想查看全局变量的值时,你可以使⽤::操作符:file::variablefunction::variable可以通过这种形式指定你所想查看的变量,是哪个⽂件中的或是哪个函数中的。

例如,查看⽂件f2.c中的全局变量x的值:gdb) p 'f2.c'::x当然,::操作符会和C++中的发⽣冲突,GDB能⾃动识别::是否C++的操作符,所以你不必担⼼在调试C++程序时会出现异常。

gdb 汇编常见命令

gdb 汇编常见命令

gdb 汇编常见命令1.引言1.1 概述概述部分的内容可以简要介绍一下gdb和汇编语言的概念。

GDB是GNU Debugger的缩写,是一个功能强大的调试工具,用于帮助开发人员调试程序。

它可以与众多编程语言一起使用,包括汇编语言。

汇编语言是一种低级别的程序设计语言,用于直接操作计算机硬件。

本文将重点介绍gdb在汇编语言中的常见命令。

通过熟悉这些命令,开发人员可以更好地理解和调试汇编程序,提高程序的运行效率和稳定性。

文章后续部分将详细介绍常见的gdb命令和它们在汇编程序中的应用场景。

首先,我们将介绍常见命令1,在此命令中,我们将学习如何设置断点、单步执行程序、查看寄存器的值等。

然后,我们将进一步探讨常见命令2,该命令将介绍如何查看内存中的数据、修改内存值以及使用条件断点等。

通过本文,读者将能够掌握这些常见的gdb命令,并能够熟练运用它们进行汇编程序的调试。

最后,在结论部分,我们将对本文进行总结,并展望未来gdb在汇编语言调试中的应用前景。

接下来,我们将详细介绍2.1 常见命令1部分的内容。

1.2 文章结构文章结构部分的内容可以参考以下内容:文章结构部分介绍了整篇文章的组织结构和内容安排,旨在为读者提供一个清晰的框架和导引,使读者能够更好地理解和掌握文章内容。

在本文中,结构主要分为三个部分:引言、正文和结论。

引言部分首先对文章的主题进行了概述,简要介绍了gdb汇编调试工具的基本概念和作用。

接着,介绍了本文的结构,包括引言、正文和结论三个部分以及各个部分的内容安排。

最后,明确了本文的目的,旨在帮助读者掌握gdb汇编调试工具的常见命令。

正文部分是本文的核心内容,主要介绍了gdb汇编调试工具的常见命令。

这些命令包括但不限于断点设置、步进执行、变量查看、寄存器查看等。

每个命令都会详细解释其作用和用法,并通过实例进行演示,以便读者能够更好地理解和掌握。

结论部分对整篇文章进行总结,并展望了未来可能的研究方向和进一步探索的问题。

比较全面的gdb调试命令

比较全面的gdb调试命令

比较全面的gdb调试命令用GDB调试程序GDB是一个强大的命令行调试工具。

大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。

UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。

于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能。

而Windows下的图形软件基本上是各自为营,互相不能调用,很不利于各种软件的相互集成。

在这里并不是要和Windows做个什么比较,所谓“寸有所长,尺有所短”,图形化工具还是有不如命令行的地方。

用GDB调试程序GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。

或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。

所谓“寸有所长,尺有所短”就是这个道理。

一般来说,GDB主要帮忙你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。

2、可让被调试的程序在你所指定的调置的断点处停住。

(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生的事。

4、动态的改变你程序的执行环境。

从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。

让我们一一看来。

一个调试示例——————源程序:tst.c1 #include23 int func(int n)4 {5 int sum=0,i;6 for(i=0; i<7; i++) {8 sum+=i;9 }10 return sum;11 }121314 main()15 {16 int i;17 long result = 0;18 for(i=1; i<=100; i++)19 {20 result += i;21 }2223 printf("result[1-100] = %d \n", result );24 printf("result[1-250] = %d \n", func(250) );25 }编译生成执行文件:(Linux下)hchen/test> cc -g tst.c -o tst使用GDB调试:hchen/test> gdb tst <---------- 启动GDBGNU gdb 5.1.1Copyright 2002 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you arewelcome to change it and/or distribute copies of it under certain conditions.Type "show copying" to see the conditions.There is absolutely no warranty for GDB. Type "show warranty" for details.This GDB was configured as "i386-suse-linux"...(gdb) l <-------------------- l命令相当于list,从第一行开始例出原码。

gdb 带命令行选项的参数

gdb 带命令行选项的参数

gdb 带命令行选项的参数详解GDB(GNU Debugger)是一个用于调试程序的强大工具,它允许你在程序执行过程中观察程序的状态、检查变量的值,以及定位和修复错误。

你可以在命令行中使用一些选项来配置GDB 的行为。

以下是一些常见的GDB 命令行选项:1. 指定要调试的程序:```gdb [program]```这是最基本的用法,`program` 是你要调试的可执行文件的名称。

2. 指定核心转储文件:```gdb [program] core```如果程序崩溃并生成了核心转储文件,你可以使用该选项来调试核心转储文件。

3. 加载符号文件:```gdb [program] -s [symbol-file]```使用`-s` 选项可以指定符号文件,这对于调试没有调试信息的二进制文件很有用。

4. 指定启动参数:```gdb --args [program] [args...]```使用`--args` 选项可以将参数传递给正在调试的程序。

5. 使用批处理模式:```gdb -batch -ex "command1" -ex "command2" [program]````-batch` 选项可以使GDB 在执行完指定命令后立即退出。

`-ex` 选项用于指定在启动GDB 后要执行的命令。

6. 使用交互式Shell:```gdb -i=mi [program]````-i=mi` 选项启用了GDB 的机器接口模式,这对于与其他程序(如IDE)进行集成很有用。

7. 设置断点:```gdb -ex "break [function]" [program]```使用`-ex` 选项可以在启动时设置断点。

8. 设置环境变量:```gdb [program] --eval-command="set environment VARNAME=VALUE"```使用`--eval-command` 选项可以在启动时设置GDB 命令。

用GDB调试程序--调试器GDB常用功能

用GDB调试程序--调试器GDB常用功能

一,GDB调试器简介GDB是Linux下的常用调试器,主要用于调试源代码、调试运行中的进程和查看core dump文件。

Linux下的调试器主要有gdb、cgdb、ddd、eclipse。

GDB调试器的运行速度快、能够进行源代码同步显示。

使用-tui 选项开启gdb命令输入和源代码的分屏显示,tui即Terminal User Interface。

二,GDB常用调试命令a)调试可执行文件以源代码为/home/zebra/目录下的test.c文件产生的可执行文件test为例(可执行文件使用gcc进行编译,并使用-g选项以产生调试信息),进行命令的说明(详细源代码参见第三部分:三,调试实例分析 )。

gdb调试源代码流程:1,开启gdb程序,即运行如下命令:gdb -q (-q用以使得gdb不输出gdb程序的版本等信息)2,指定调试的二进制文件:file test3,list查看源代码4,设定断点breakpoint mainbreakpoint sub上述分别在main函数和sub函数处设定了断点。

断点可以设置在任意已知源代码文件的某一行,某一个函数,同时可以指定是设置在哪个/哪些线程上(见下边描述)。

5,运行可执行文件:run6,这样程序会运行到断点处停止下来,gdb会打印当前断点的信息。

7,使用s 或者n进行单步调试。

s即step,n即next都是执行一条语句,然后停下来。

如果想执行一条汇编语句,则可以使用si ,ni,即step instruction,next instruction。

8,bt命令查看当前的调用栈,bt即backtrace。

9,info frame查看函数帧信息。

10,frame n 进入某个函数帧(编号为n)11,info 命令可以对当前的函数帧的寄存器、局部变量、函数的参数进行查看。

info register;info local;info args。

12,disassemble对当前函数对应的二进制进行反汇编。

gdb常用调试命令

gdb常用调试命令

gdb常用调试命令
1. run: 用于开始程序调试
2. break: 用于设置断点,可以是源代码的行号、函数名或地址
3. clear: 用于清除断点,可以是源代码的行号、函数名或地址
4. continue: 用于让程序继续执行,直到遇到断点
5. stepi: 单步运行,每次运行一条汇编指令
6. step: 单步运行,每次运行一行C源代码
7. nexti: 运行至次汇编指令,不进入函数内部
8. next: 运行至次行C源代码,不进入函数内部
9. jump: 任意跳转到某行源代码运行
10. until: 从断点处运行到某行源代码,不包括该行
11. finish: 运行到当前函数的返回处
12. info breakpoints: 显示所有的断点
13. delete: 删除断点
14. watch: 设置变量的某种变化条件
15. list: 显示源代码
16. disassemble: 反汇编指令
17. x: 以十六进制及字符串查看内存值
18. print: 打印数据、表达式及变量
19. set: 设置变量值
20. backtrace: 显示堆栈调用过程。

Linux终端命令解析gdb命令详解

Linux终端命令解析gdb命令详解

Linux终端命令解析gdb命令详解Linux终端命令解析:gdb命令详解GDB(GNU Debugger)是一个功能强大的调试工具,它可以帮助程序员跟踪和调试程序。

在Linux终端中,通过使用GDB命令,我们可以深入分析代码,查找和修复错误。

本文将详细介绍GDB的常用命令和其功能。

一、启动GDB在终端中执行以下命令来启动GDB:gdb <可执行文件><可执行文件>表示你要调试的可执行文件的路径。

启动GDB后,会出现一个类似于"gdb>"的提示符。

下面是一些常用的GDB命令:1. 设置断点:- break <函数名>:在指定函数名处设置断点。

- break <行号>:在指定行号处设置断点。

- break <文件名:行号>:在指定文件的行号处设置断点。

2. 运行程序:- run:开始执行程序。

如果设置了断点,程序会在第一个断点处停下来。

- continue:继续执行程序,直到遇到下一个断点或程序结束。

3. 执行代码:- next:执行下一行代码,并跳过函数调用。

- step:执行下一行代码,包括函数调用。

- finish:执行当前函数的剩余部分,并停在函数调用的下一行。

4. 查看变量:- print <变量名>:打印指定变量的值。

- display <变量名>:在每次停下来时显示指定变量的值。

- watch <变量名>:当指定变量的值发生变化时,停下来。

5. 查看堆栈:- backtrace:显示当前的函数调用堆栈。

- frame <帧号>:切换到指定帧号的堆栈帧。

6. 修改程序状态:- set <变量名>=<值>:修改指定变量的值。

- return <值>:以指定的值结束当前函数。

7. 退出GDB:- quit:退出GDB。

以上只是GDB的一些常用命令,可以帮助我们进行简单的调试操作。

gdb 常用命令

gdb 常用命令
1)file命令:装入想要调试的可执行文件。
2)cd命令:改变工作目录。
3)pwd命令:返回当前工作日录。
4)run命令:执行当前被调试的程序。
5)kill命令:停止正在调试的应用程序。
6)list命令:列出正在调试的应用程序的源代码。
7)break命令:设置断点。
8)Tbreak命令;设置临时断点。它的语法与break相同。区别在于用tbreak设置的断点执行一次之后立即消失。
13)step命令:执行下一条源代码,进入函数内部。如果调用了某个函数,会跳到函数所在的代码中等候一步步执行。执行这个命令的前提是已经用run开始执行代码。
14)display命令:在应用程序每次停止运行时显示表达式的值。
15)info break命令:显示当前断点列表,包括每个断点到达的次数。
9)watch命令:设置监视点,监视表达式的变化。
10)awatch命令:设置读写监视点。当要监视的表达式被读或写时将应用程序挂起。它的语法与watch命令相同。
11)rwatch命令:设置读监视点,当监视表达式被读时将程序挂起,等侍调试。此命令的语法与watch相同。
12)next命令:执行下一条源代码,但是不进入函数内部。也就是说,将一条函数调用作为一条语句执行。执行这个命令的前提是已经run,开始了代码的执行。
22)Shell命令:执行Linux Shell命令。
23)make命令:不退出gdb而重新编译生成可执行文件。
24)it命令:退出gdb。
16)info files命令:显示调试文件的信息。
17)info func命令:显示所有的函数名。
18)info local命令:显示当前函数的所有局部变量的信息。

gdb调试命令

gdb调试命令

一般来说GDB主要调试的是C/C++的程序。

要使用gdb调试C/C++的程序,必须在编译时把调试信息加到可执行文件中。

使用编译器(cc/gcc/g++)的-g 参数可以做到这一点。

如:> cc -g hello.c -o hello> g++ -g hello.cpp -o hello如果没有-g,只能看到运行时的内存地址,看不见程序的函数名、变量名。

1. 启动方法>gdb programprogram是可执行文件的名字,一般在当前目录下。

2. 为可执行程序设定运行参数运行参数的设置在进入gdb环境后。

<gdb>set args参数列表可用show args查看设定的参数。

将可执行程序用gdbprogram_name调用到内存中后,就可以利用gdb 的反汇编命令调试程序了。

常用命令如下:(1)设置反汇编的代码为intel格式gdb默认反汇编为att格式的指令。

可以通过show disassembly-flavor查看。

如果习惯intel格式的,用命令set disassembly-flavor intel设置。

(2)反汇编命令disas/disass/disassemble功能:将内存中的机器码程序以指令助记符的形式显示出来。

格式: disas/disass/disassemble 函数名/起始地址[,结束地址]例如:disas main,显示main函数对应的汇编代码(3)info line功能:查看某个line的相关信息。

格式:info line 函数名/*内存地址说明:如果参数为函数名,则显示该函数在源文件中的行号及在内存中的起始地址和结束地址。

例如:info line main输出为:Line 36 of "bomb.c" starts at address 0x401050 <main> and ends at 0x40106b <main+27>.如果参数为*内存地址,则显示该内存地址的指令对应的语句所在的函数在源文件中的行号及在内存中的起始地址和结束地址。

gdb调试工具常用命令

gdb调试工具常用命令

gdb调试⼯具常⽤命令编译程序时需要加上-g,之后才能⽤gdb进⾏调试:gcc -g main.c -o maingdb中命令:回车键:重复上⼀命令(gdb)help:查看命令帮助,具体命令查询在gdb中输⼊help + 命令,简写h(gdb)run:重新开始运⾏⽂件(run-text:加载⽂本⽂件,run-bin:加载⼆进制⽂件),简写r (gdb)start:单步执⾏,运⾏程序,停在第⼀执⾏语句(gdb)list:查看原代码(list-n,从第n⾏开始查看代码。

list+ 函数名:查看具体函数),简写l (gdb)set:设置变量的值(gdb)next:单步调试(逐过程,函数直接执⾏),简写n(gdb)step:单步调试(逐语句:跳⼊⾃定义函数内部执⾏),简写s(gdb)backtrace:查看函数的调⽤的栈帧和层级关系,简写bt(gdb)frame:切换函数的栈帧,简写f(gdb)info:查看函数内部局部变量的数值,简写i(gdb)finish:结束当前函数,返回到函数调⽤点(gdb)continue:继续运⾏,简写c(gdb)print:打印值及地址,简写p(gdb)quit:退出gdb,简写q(gdb)break+num:在第num⾏设置断点,简写b(gdb)info breakpoints:查看当前设置的所有断点(gdb)delete breakpoints num:删除第num个断点,简写d(gdb)display:追踪查看具体变量值(gdb)undisplay:取消追踪观察变量(gdb)watch:被设置观察点的变量发⽣修改时,打印显⽰(gdb)i watch:显⽰观察点(gdb)enable breakpoints:启⽤断点(gdb)disable breakpoints:禁⽤断点(gdb)x:查看内存x/20xw 显⽰20个单元,16进制,4字节每单元(gdb)run argv[1] argv[2]:调试时命令⾏传参(gdb)set follow-fork-mode child#Makefile项⽬管理:选择跟踪⽗⼦进程(fork())core⽂件:先⽤$ ulimit -c 1024 开启core,当程序出错会⾃动⽣成core⽂件。

gdb 带命令行选项的参数

gdb 带命令行选项的参数

gdb 带命令行选项的参数
摘要:
1.概述GDB
2.GDB 的命令行选项参数
3.常用的GDB 命令行选项参数
4.GDB 命令行选项参数的使用方法
5.总结
正文:
GDB 是一种强大的调试工具,可以用于调试C 和C++程序。

在使用GDB 时,我们可以通过命令行选项参数来控制GDB 的行为和输出。

GDB 的命令行选项参数可以在GDB 命令行界面中使用,它们通常以“-”开头,后面跟参数名。

例如,“-g”选项表示以调试模式启动程序,“-p”选项表示指定程序的入口点。

下面是一些常用的GDB 命令行选项参数:
- -g:以调试模式启动程序
- -p:指定程序的入口点
- -c:指定调试程序的命令行参数
- -s:指定调试程序的源文件路径
- -O:设置调试选项
- -v:显示版本信息
使用GDB 命令行选项参数的方法非常简单,只需在GDB 命令行界面中
输入选项参数即可。

例如,如果想以调试模式启动程序,可以输入“-g”选项,如果想指定程序的入口点,可以输入“-p”选项,并跟入口点的文件路径和行号。

gdb调试命令

gdb调试命令

gdb调试命令 gdb是⼀个在UNIX环境下的命令⾏调试⼯具。

如果需要使⽤gdb调试程序,请在gcc时加上-g选项。

下⾯的命令部分是简化版,⽐如使⽤l代替list等等。

1.基本命令1)进⼊GDB #gdb test test是要调试的程序,由gcc test.c -g -o test⽣成。

进⼊后提⽰符变为(gdb) 。

2)查看源码 (gdb) l 源码会进⾏⾏号提⽰。

如果需要查看在其他⽂件中定义的函数,在l后加上函数名即可定位到这个函数的定义及查看附近的其他源码。

或者:使⽤断点或单步运⾏,到某个函数处使⽤s进⼊这个函数。

3)设置断点 (gdb) b 6 这样会在运⾏到源码第6⾏时停⽌,可以查看变量的值、堆栈情况等;这个⾏号是gdb的⾏号。

4)查看断点处情况 (gdb) info b 可以键⼊"info b"来查看断点处情况,可以设置多个断点;5)运⾏代码 (gdb) r6)显⽰变量值 (gdb) p n 在程序暂停时,键⼊"p 变量名"(print)即可; GDB在显⽰变量值时都会在对应值之前加上"$N"标记,它是当前变量值的引⽤标记,以后若想再次引⽤此变量,就可以直接写作"$N",⽽⽆需写冗长的变量名;7)观察变量 (gdb) watch n在某⼀循环处,往往希望能够观察⼀个变量的变化情况,这时就可以键⼊命令"watch"来观察变量的变化情况,GDB在"n"设置了观察点;8)单步运⾏ (gdb) n9)程序继续运⾏ (gdb) c 使程序继续往下运⾏,直到再次遇到断点或程序结束;10)退出GDB (gdb) q2.断点调试命令格式 例⼦ 作⽤break + 设置断点的⾏号 break n 在n⾏处设置断点tbreak + ⾏号或函数名 tbreak n/func 设置临时断点,到达后被⾃动删除break + filename + ⾏号 break main.c:10 ⽤于在指定⽂件对应⾏设置断点break + <0x...> break 0x3400a ⽤于在内存某⼀位置处暂停break + ⾏号 + if + 条件 break 10 if i==3 ⽤于设置条件断点,在循环中使⽤⾮常⽅便info breakpoints/watchpoints [n] info break n表⽰断点号,查看断点/观察点的情况clear + 要清除的断点⾏号 clear 10 ⽤于清除对应⾏的断点,要给出断点的⾏号,清除时GDB会给出提⽰delete + 要清除的断点编号 delete 3 ⽤于清除断点和⾃动显⽰的表达式的命令,要给出断点的编号,清除时GDB不会给出任何提⽰disable/enable + 断点编号 disable 3 让所设断点暂时失效/使能,如果要让多个编号处的断点失效/使能,可将编号之间⽤空格隔开awatch/watch + 变量 awatch/watch i 设置⼀个观察点,当变量被读出或写⼊时程序被暂停rwatch + 变量 rwatch i 设置⼀个观察点,当变量被读出时,程序被暂停catch 设置捕捉点来补捉程序运⾏时的⼀些事件。

linux,gdb调试基本指令_linux gdb调试指令

linux,gdb调试基本指令_linux gdb调试指令

(5).t 按二进制格式显示变量。
p str@str_len //打印字符串
(6).a 按十六进制格式显示变量。
第3页共7页
(7).i 指令地址格式
本文格式为 Word 版,下载可任意编辑,页眉双击删除即可。
(1)线程锁
(8).c 按字符格式显示变量。
show scheduler-locking
(9).f 按浮点数格式显示变量。
第2页共7页
本文格式为 Word 版,下载可任意编辑,页眉双击删除即可。
(1).p &amp;examined_rows,得到地址
info locals //打印出当前函数中所有局部变量及其值。
(2).watch *(ha_rows *) 0x7ffec8005e28,则可以观察这个变量的变
info args //打印出当前函数的参数名及其值。
next //单步执行
CFLAGS 指定-g 选项,否则调试时没有符号信息。
return //函数未执行完,忽略未执行的语句,返回。
gdb program //最常用的用 gdb 启动程序,开始调试的方式
finish //函数执行完毕返回。
gdb program core //用 gdb 查看 core dump 文件,跟踪程序 core 的
本文格式为 Word 版,下载可任意编辑,页眉双击删除即可。
linux,gdb 调试基本指令_linux gdb 调试指令
比如:打印$pid 进程所有线程的堆栈并退出。 gdb -ex &quot;set pagination 0&quot; -ex &quot;thread apply all
近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux bt&quot; -batch -p $pid

gdb调试基本命令

gdb调试基本命令

GDB调试精粹及使用实例一:列文件清单1.List(gdb) list line1,line2二:执行程序要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和外壳通配符(*、?、[、])在内。

如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。

利用set args 命令就可以修改发送给程序的参数,而使用show args 命令就可以查看其缺省参数的列表。

(gdb)set args –b –x(gdb) show argsbacktrace命令为堆栈提供向后跟踪功能。

Backtrace 命令产生一张列表,包含着从最近的过程开始的所以有效过程和调用这些过程的参数。

三:显示数据利用print 命令可以检查各个变量的值。

(gdb) print p (p为变量名)whatis 命令可以显示某个变量的类型(gdb) whatis ptype = int *print 是gdb的一个功能很强的命令,利用它可以显示被调试的语言中任何有效的表达式。

表达式除了包含你程序中的变量外,还可以包含以下内容:l 对程序中函数的调用(gdb) print find_entry(1,0)l 数据结构和其他复杂对象(gdb) print *table_start$8={e=reference=’\000’,location=0x0,next=0x0}l 值的历史成分(gdb)print $1 ($1为历史记录变量,在以后可以直接引用$1 的值)l 人为数组人为数组提供了一种去显示存储器块(数组节或动态分配的存储区)内容的方法。

早期的调试程序没有很好的方法将任意的指针换成一个数组。

就像对待参数一样,让我们查看内存中在变量h后面的10个整数,一个动态数组的语法如下所示:base@length因此,要想显示在h后面的10个元素,可以使用h@10:(gdb)print h@10$13=(-1,345,23,-234,0,0,0,98,345,10)四:断点(breakpoint)break命令(可以简写为b)可以用来在调试的程序中设置断点,该命令有如下四种形式:l break line-number 使程序恰好在执行给定行之前停止。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

layout asm:显示反汇编窗口
layout regs:显示源代码/反汇编和CPU寄存器窗口
layout split:显示源代码和反汇编窗口
Ctrl + L:刷新窗口
quit:简记为 q ,退出gdb
当然,gdb的功能远不止这些,包括多进程/多线程/信号/远程调试等功能在这里均没有提及,有需要的读者可以参考其它信息。
GDB 常用调试命令
调用gdb编译需要在cc后面加 -g参数再加-o;
[root@redhat home]#gdb 调试文件:启动gdb
(gdb) l :(字母l)从第一行开始列出源码
(gdb) break n :在第n行处设置断点
(gdb) break func:在函数func()的入口处设置断点
(gdb) list
1 ../sysdeps/i386/elf/start.S: No such file or directory.
in ../sysdeps/i386/elf/பைடு நூலகம்tart.S
run:简记为 r ,其作用是运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步的命令。
kill:将强行终止当前正在调试的程序
help 命令:help 命令将显示“命令”的常用帮助信息
call 函数(参数):调用“函数”,并传递“参数”,如:call gdb_test(55)
layout:用于分割窗口,可以一边查看代码,一边测试:
layout src:显示源代码窗口
(gdb) set args 参数:指定运行时的参数
(gdb) show args:查看设置好的参数
(gdb) show paths:查看程序运行路径;
set environment varname [=value] 设置环境变量。如:set env USER=hchen;
list 行号:将显示当前文件以“行号”为中心的前后10行代码,如:list 12
list 函数名:将显示“函数名”所在函数的源代码,如:list main
list :不带参数,将接着上一次 list 命令的,输出下边的内容。
注意 :如果运行list 命令得到类似如下的打印,那是因为在编译程序时没有加入 -g 选项:
bt:显示当前程序的函数调用堆栈。
display 表达式:在单步运行时将非常有用,使用display命令设置一个表达式后,它将在每次单步进行指令后,紧接着输出被设置的表达式及值。如: display a
watch 表达式:设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序。如: watch a
break 函数名:在用户定义的函数“函数名”处设置断点,如:break cb_button
info breakpoints:显示当前程序的断点设置情况
disable breakpoints Num:关闭断点“Num”,使其无效,其中“Num”为 info breakpoints 中显示的对应值
show environment [varname] 查看环境变量;
(gdb) cd 相当于shell的cd;
(gdb)pwd :显示当前所在目录
(gdb)info program: 来查看程序的是否在运行,进程号,被暂停的原因。
(gdb)clear 行号n:清除第n行的断点
until:当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。
finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。
stepi或nexti:单步跟踪一些机器指令。
print 表达式:简记为 p ,其中“表达式”可以是任何当前正在被测试程序的有效表达式,比如当前正在调试C语言的程序,那么“表达式”可以是任何C语言的有效表达式,包括数字,变量甚至是函数调用。
回车:重复上一条命令。
set args:设置运行程序时的命令行参数,如:set args 33 55
show args:显示命令行参数
continue:简讯为 c ,其作用是继续运行被断点中断的程序。
break:为程序设置断点。
break 行号:在当前文件的“行号”处设置断点,如:break 33
print a:将显示整数 a 的值
print ++a:将把 a 中的值加1,并显示出来
print name:将显示字符串 name 的值
print gdb_test(22):将以整数22作为参数调用 gdb_test() 函数
print gdb_test(a):将以变量 a 作为参数调用 gdb_test() 函数
(gdb)delete 断点号n:删除第n个断点
(gdb)disable 断点号n:暂停第n个断点
(gdb)enable 断点号n:开启第n个断点
(gdb)step:单步调试如果有函数调用,则进入函数;与命令n不同,n是不进入调用的函数的
list :简记为 l ,其作用就是列出程序的源代码,默认每次显示10行。
enable breakpoints Num:打开断点“Num”,使其重新生效
step:简记为 s ,单步跟踪程序,当遇到函数调用时,则进入此函数体(一般只进入用户自定义函数)。
next:简记为 n,单步跟踪程序,当遇到函数调用时,也不进入此函数体;此命令同 step 的主要区别是,step 遇到用户自定义的函数,将步进到函数中去运行,而 next 则直接调用函数,不会进入到函数体内。
(gdb) info break: 查看断点信息
(gdb) r:运行程序
(gdb) n:单步执行
(gdb) c:继续运行
(gdb) p 变量 :打印变量的值
(gdb) bt:查看函数堆栈
(gdb) finish:退出函数
(gdb) shell 命令行:执行shell命令行
相关文档
最新文档