gdb系列之三 GDB命令



假如缩写是无歧义的话,你可以将一个GDB命令缩写为开头的几个字母;你也可以用回车键来重复一些GDB命令。你也可以

用TAP键来让GDB补全一个命令的剩余部分(或者告诉你可供选择的命令,假如不止一个命令可选的话)。

3.1 命令语法

一个GDB命令是单独的输入行。没有长度限制。命令由一个命令名开始,接着是提供给命令的参数。例如,命令step接收

一个代表步长的参数,就像”step 5″.你也可以用不带参数的step命令。某些命令不允许参数。

GDB命令名总是在没有歧义的情况下允许截短。在某些情况下,即使是有歧义的缩写也是允许的;比如,s是特别为step而定义的缩写,即使有其他的命令也是以s开头。你可以用这些缩写作为help命令的参数测试他们。

一个空白行的输入(敲入回车键)对GDB而言意味着重复此前的命令。有些命令(例如run)不能用这种方式重复;这些命令不经意的重复可能导致麻烦或者你不大希望重复他们。用户定义命令可以关闭这些feature;参见20.1.1节[定义],227页。

list和x命令,在你用回车键重复他们的时候,会建构新的而不是重复此前输入的参数。这个特性可以很便捷扫描代码和内存。

GDB也可以以另外一种方式使用回车键:和通用工具more相似的方式来区分长输出(参见19.4节[屏幕大小],219页)。因为在这种情况下很容易按下过多的回车键,在产生长输出时GDB关闭命令重复的功能。

从#开始到行结束的文本都是注释;这些文本什么也不干。他们主要是在命令文件里起帮助理解的作用(参见20.1.3节[命令文件],229页)。

Ctrl-o绑定对于重复复杂的命令序列很有帮助。这个命令接受一个当前行,例如一个回车,接着从命令历史里取得相对于当前行的下一行来编辑。

3.2 命令补全

GDB可以为你补全命令的剩余部分,如果有且只有一个可能的命令;它也可以在任何时间为你显示一个命令里的下一个词的有效可能值。命令补全功能对GDB命令,子命令和你的程序里的符号都有效。

无论何时你想要GDB补全一个单词的时候,按下TAB键就可以了。如果只有一个可能,GDB会补全这个词,接着等待你去完成这个命令(按下回车键)。例如,如果你敲入

(gdb) info bre <TABi>

GDB补全’breakpoints’的剩余部分,因为只有info子命令以’bre’开头:

(gdb) info breakpoints

现 在你可以敲入回车键来运行info breakpoints命令;假如’breakpoints’看上去不像你期待的,你可以用回退键删除之,然后敲入别的。,假如 ‘breakpoints’看上去不像你期待的。(如果在开头你就确信你要的就是info breakpoints,你就可以用缩写的形式来立即回车运行’info bre’,而不必等命令补全再回车)。

如果在你按下TAB键的时候有过个候选项的话,GDB会发出一个铃声。你可以多敲入几个字符后再试一下,或者再按一次TAB键

;GDB会为你显示所有可能补全的候选项。例如,你可能想要在一个名字开头是’make_’子函数里设置一个断点,而在你敲入b make_<TAB>的时候,GDB会发出一声响。再次敲入<TAB>键会显示所有以make_开头的函数,例如:

(gdb) b make_ <TAB>

gdb sounds bell; press hTABi again, to see:

make_a_section_from_file make_environ

make_abs_section make_function_type

make_blockvector make_pointer_type

make_cleanup make_reference_type

make_command make_symbol_completion_list

(gdb) b make_

显示完所有可能的候选项之后,GDB会复制你刚才的输入(在这个例子里是’b make_’)以便你完成这个命令。

如果你只是想要在开始的时候看看候选列表,你可以按下M-?而不是按下<TAB>两次。M-?是<META>?.你可以在敲入?的时候按住

<META>键(假如键盘上有这个键的话),假如没有这个键,你可以按下<ESC>再按下?来代替。

有时候你需要的字符串可能含有圆括号,或者GDB认为这个字符串是不一个字。为了让补全功能在这种情况下生效,你可以用’

(单括号)封起来。

这种情况最有可能出现在你敲入一个C++函数名的时候。这是因为C++允许函数重载(同一个函数名多次定义,以参数类型来区分)。例如,在一个名为 name的函数设置断点的时候,你需要区分是在参数为int的函数name上还是参数为float的函数name设置断点的。为了在这时用词补全功能,在 函数名之前敲入一个单引号’。这样GDB就可以知道需要考虑比通常只按下<TAB>或者M-?更多的信息:

(gdb) b ?ˉbubble( M-?

bubble(double,double) bubble(int,int)

(gdb) b ?ˉbubble(

在某些需要补全的情况下,GDB可以提示你需要引号。这时,如果你开始的时候没有敲入引号,GDB会为你插入一个引号:

(gdb) b bub <TAB>

GDB会以下面的输出提醒你,然后响一声:

(gdb) b ’bubble(

通常的,在有重载符号情况下,在你还没有开始敲入参数列表的时候就用补全功能的时候,GDB提示需要一个引号然后插入它。

更多有关重载函数信息,参见12.4.1.3节[C++表达式],126页。你可以用set overload-resolution off命令关闭重载解决方案,参见12.4.1.7节,[GDB的C++功能],128页。

3.3 帮助

用help功能,你可以获得GDB的命令信息。

help

h    你可以用help(缩写h)不带参数来显示一个命令分类的简短列表。

(gdb) help

List of classes of commands:

aliases — Aliases of other commands

breakpoints — Making program stop at certain points

data — Examining data

files — Specifying and examining files

internals — Maintenance commands

obscure — Obscure features

running — Running the program

stack — Examining the stack

status — Status inquiries

support — Support facilities

tracepoints — Tracing of program execution without

stopping the program

user-defined — User-defined commands

Type “help” followed by a class name for a list of

commands in that class.

Type “help” followed by command name for full

documentation.

Command name abbreviations are allowed if unambiguous.

(gdb)

help class

用help分类作为参数,你可以得到这个分类里命令列表。比如,下面是status分类的帮助显示:

(gdb) help status

Status inquiries.

List of commands:

info — Generic command for showing things

about the program being debugged

show — Generic command for showing things

about the debugger<br

/>    Type “help” followed by command name for full

documentation.

Command name abbreviations are allowed if unambiguous.

(gdb)

help command

用命令名作参数,GDB会显示一段如何使用这个命令的信息。

apropos args

apropos命令会在命令和文档里文档搜索这个args指定的正则表达式。这个命令会打印所有符合的结果。例如:

apropos reload

结果:

set symbol-reloading — Set dynamic symbol table reloading

multiple times in one run

show symbol-reloading — Show dynamic symbol table reloading

multiple times in one run

complete args

complete args命令列出所有可能的补全结果。用args指定你想要的命令的开头字母。例如:

complete i

结果:

if

ignore

info

inspect

这个是为GNU Emacs设计的。

更进一步的,你可以用GDB命令info和show来查询你程序的状态或者GDB本身的状态。这两个命令都支持多个主题的查询;这本手册会在恰当的时候介绍这两个命令。索引里的info和show下的列表列出了所有的子命令。参见[索引],407页。

info    这个命令(缩写i)可以描述程序的状态。例如,你可以用info args显示传递给函数的参数,用info registers来列出

寄存器数据,用info breakpoints列出你设置的断点。你可以用help info来取得info的所有子命令。

set    你可以用set命令把一个表达式的值来设置一个环境变量。例如,你可以用set prompt $来设置GDB提示符。

show    和info不同,show描述的GDB本身的状态。你可以用set命令改变大多数你可以用show显示的内容。例如,你可以用set

radix来设置显示的数值进制系统,或者用show radix来显示数值进制。

你可以用不带参数的show命令来显示所有可以设置的参数和它们的值;你也可以用info set。这两个命令是一样的。

还有其余3种show子命令,这3中命令缺乏对应的set命令:

show version

显示当前GDB的版本。你应该在GDB bug报告中包含版本信息。如果你的机器上有多个版本的GDB,你可能需要知道哪个版

本是你正在运行的;随着GDB的发展,新的命令会引入,而一些旧的将废弃。同时,许多系统供应商移植了不同版本的

GDB,在GNU/Linux发行版也存在着多种版本的GDB.版本号和你启动时显示一样。

show copying

info copying

显示GDB版权信息。

show warranty

info warranty

显示GNU免责声明,或者保证(如果你的GDB版本有的话)。

<br

<br

转载     http://zhiwei.li/text/2010/01/gdb%E6%89%8B%E5%86%8C3gdb%E5%91%BD%E4%BB%A4/

<br

如有版权问题,请联系QQ       858668791

<br

<br

时间: 2024-10-30 05:26:47

gdb系列之三 GDB命令的相关文章

OpenvSwitch系列之ovs-vsctl命令

Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl 命令使用 OpenvSwitch的操作命令有若干个,其中比较重要的有 ovs-ovsctl   获取或者更改ovs-vswitchd的配置信息,此工具操作的时候会更新ovsdb-server中的数据库 ovs-ofctl     操作交换机里的流表 ovsdb-tool  对ovsdb数据库操作,不经过ovsdb-server

GDB下查看内存命令(x命令)

http://blog.csdn.net/allenlinrui/article/details/5964046 可以使用examine命令(简写是x)来查看内存地址中的值.x命令的语法如下所示: x/<n/f/u> <addr> n.f.u是可选的参数. n是一个正整数,表示需要显示的内存单元的个数,也就是说从当前地址向后显示几个内存单元的内容,一个内存单元的大小由后面的u定义. f 表示显示的格式,参见下面.如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式

gdb对应vc调试命令

gdb vc调试对照表: 实现功能                vc                   gdb 修改后编译              f7                   make 跳出函数(step out)    shift+f11            finish,f 重新启动                ctrl+shift+f5        run,r 运行到指定行            f9+f5                tbreak,tb + c

gdb系列之四 在GDB里运行程序

在你开始在GDB里运行程序前,你需要在编译的时候产生调试信息. 你可以在你选定的环境里带参数(如果有的话)的启动GDB.如果你是在本地调试,你可以重定向输入输出,调试一个已运行 的进程,或者结束一个进程. 4.1 为调试而编译 为了有效的调试程序,你需要在编译的时候产生调试信息.调试信息存储在目标文件里:调试信息描述了数据和函数的类型, 源代码和可执行代码的对应关系. 编译时指定编译器的'-g'选项可以产生调试信息. 在编译给你的客户发布的程序时,可以用'-O'选项指定编译器进行优化.然而,许多

gdb调试之重要命令

一.GDB改变程序的执行 一旦使用GDB挂上被调试程序,当程序运行起来后,你可以根据自己的调试思路来动态地在GDB中更改当前被调试程序的运行线路或是其变量的值,这个强大的功能能够让你更好的调试你的程序,比如,你可以在程序的一次运行中走遍程序的所有分支. 修改变量值 修改被调试程序运行时的变量值,在GDB中很容易实现,使用GDB的print命令即可完成.如: (gdb) print x=4 x=4这个表达式是C/C++的语法,意为把变量x的值修改为4,如果你当前调试的语言是Pascal,那么你可以

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

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

gdb系列之一 一个GDB会话样例

 翻译:shyboysby.spaces.live.com 本翻译遵从GPL.参见: gdb is free software, protected by the gnu General Public License (GPL). The GPL gives you the freedom to copy or adapt a licensed program-but every person getting a copy also gets with it the freedom to m

【iOS与EV3混合机器人编程系列之三】编写EV3 Port Viewer 应用监测EV3端口数据

在前两篇文章中,我们对iOS与EV3混合机器人编程做了一个基本的设想,并且介绍了要完成项目所需的软硬件准备和知识准备. 那么在今天这一篇文章中,我们将直接真正开始项目实践. ==第一个项目: EV3 Port Viewer== 项目目的:在iOS设备上通过WiFi连接EV3并且读取EV3每个端口的数据. 大家可以一周之后在App Store上搜索EV3 Port Viewer,那么我已经做了一个范例App发布了,正在审核中 应用的基本使用要求:将EV3和iPhone同时连接到同一个WiFi网络中

AWS系列之三 使用EBS

Amazon Elastic Block Store(EBS)可作为EC2实例的持久性数据块级存储.其具有高可用性和持久性的特点,可用性高达99.999%.给现有的EC2实例扩展新的存储块只需要几分钟的时间,省时省力.每个EBS块都被放置在一个特定的可用区内,并且会自动维护一个副本,随时保护数据安全. Amazon EBS共提供三种硬盘类型,SSD(固态硬盘), Provisioned IOPS SSD(特供IOPS固态硬盘)和Magnetic(普通硬盘).SSD是默认的EC实例的硬盘格式(凶残