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_environmake_abs_section make_function_typemake_blockvector make_pointer_typemake_cleanup make_reference_typemake_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的命令信息。helph 你可以用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 runcomplete 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 copyinginfo copying 显示GDB版权信息。show warrantyinfo warranty 显示GNU免责声明,或者保证(如果你的GDB版本有的话)。

<br

<br转载 %E6%89%8B%E5%86%8C3gdb%E5%91%BD%E4%BB%A4/

<br如有版权问题,请联系QQ858668791

<br

<br

与其临渊羡鱼,不如退而结网。

gdb系列之三 GDB命令

相关文章:

你感兴趣的文章:

标签云: