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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。