当前位置:首页 > gdb手册
2.3 Shell命令
要在调试会话中需要执行一个应时的shell命令,是不需要离开或挂起GDB的;只需使用“shell”命令即可。
shell command string
调用标准shell,执行command string。倘若有环境变量SHELL,那么它就决定应该运行哪个shell。否则,GDB就使用默认的shell(UNIX系统是/bin/sh,MS-DOS是COMMAND.COM,等等)。
make工具一般是开发环境所需要的。最好不要在GDB中使用它。
make make-args
以指定的参数执行make程序。等同于“shell make make-args”。
2.4 Loging输出
你可能希望将GDB的命令输出保存到一个文件中去。这里有几个指令控制GDB的Loging。
set logging on
开启logging。 set logging off
关闭logging。 set logging file file
更改当前logfile的名字。默认的logfile是“gdb.txt”。 set logging overwrite [on|off]
通常,GDB是追加logfile。如果设置overwrite为on的话,GDB覆盖logfile。 set logging redirect [on|off]
通常,GDB同时向终端和logfile输出。要是想让GDB只输入到logfile,就设置redirect为on。 show logging
显示当前的logging设置值。
3.GDB命令
可以使用命令名的头几个字母简写GDB的命令,只要这个简写不会产生二义性;还以通过键入RET重复某些命令。也可用利用TAB键,让GDB自己填写命令单词中剩余的部分(或者是可用的备选方案,只要有多于1个的可能性)。
3.1命令语法 3.2命令完成 3.3获得帮助
如果向GDB寻求帮助。 如何给GDB下命令
3.1命令语法
一个GDB命令是一个单行输入,对于长度没有限制。以命令名开始,后跟一些参数,这些参数的意义取决于命令名。例如,step命令,它接受一个表明步进次数的参数,如在“step 5”中。step命令也可以不带参数。有些命令根本就不允许有参数。
GDB的命令总是可以被缩短的,只要这个简写不会产生二义性。其他可能的命令简写都已被列在个专用令文档中了。在某些情况下,甚至二义性的简写也是被允许的;例如:s就是被特别定义为等同于step的,即使还有其他的一些名字以s开头的命令。可以把它们作为help命令的参数来测试一个简写命令。向GDB输入一个空白行(仅键入RET)意味着重复先前的命令。这种方法是不能重复某些命令的(比如run)。有些命令,不小心的重复可能会导致一些问题,况且你也不太可能要重复。自定义命令可以关闭这一特性,见禁止重复一节。
list和x命令,当你使用RET重复它们时,构造新的参数,而不是原来的。这允许轻松地扫描源代码或内存。
GDB也可以以另外一种方式使用RET:以一种类似通用工具more的方式,分屏冗长的输出(见屏幕尺寸一章)。由于在这种情形下,按一次RET后容易产生太多的重复,因此,GDB在任何能够产生那种显示的命令以后都关闭了命令重复。
任何从一个#到行尾的文本都是一个注释;它什么也不做;它主要用在命令文件中(见命令文件一章)。
C-o组合有重复一个复杂命令序列的作用。这个命令接受当前行,如同RET,然后从编
辑历史记录中读取与当前行相关的下一行。
3.2命令完成
如果只有一种可能性的话,GDB可以为你填写命令单词中剩余的部分;也可以把所有有效的可能性的命令单词显示给你,而且任何时候都可以。这个功能对GDB命令,GDB子命令以及程序中的符号名起作用。
只要你想让GDB填写一个词的剩余的部分,按TAB键即可。如果只有一种可能性,GDB在填写完后就等待你去完成这个命令(或者说按RET输入它)。例如,如果你键入:
(gdb) info bre TAB
GDB填写“breakpoints”单词的剩余部分,因为info的子命令以bre开头的只有它:
(gdb) info breakpoints
既可以在这个位置按下RET运行这个info breakpoints命令,也可以按下控各,输入其他的东西,如果“info breakpoints”不是你所期待的命令的话(如果“info breakpoints”确实就是你想要的,还是在“info bre”后立即按下RET为好,与其使用命令完成,还不如使用命令缩写)。
当你按TAB时,如果对于下一个单词有多于一个的可能性的话,GDB会发出一个蜂鸣。你既可以补充更多的字母然后重试,也可以在按一下TAB,GDB显示对于那个单词的所有可能的完成。例如,你可能想在一个名字以“make_”开头的子程序中设置一个断点,可是当你键入b make_TAB时,GDB只是发出了一个蜂鸣。再按一次TAB,显示出程序中所有以这些字母开头的子程序名。
(gdb) b make_ TAB
GDB发出蜂鸣;再按一次TAB,看到:
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_”),便于你完成命令。
如果先前你只是想看一下备选方案列表,与其按TAB两次,还不如按M-?。M-?意思是META ?。即可以通过按住键盘上代表META的键(如果有,译者注:在PC上一般是ALT),再按下?输入,也可以按住ESC后再按?输入。
有些时候,你需要的字符串,虽然逻辑上是一个“词”,但可能包含圆括号或者是其他的字符,被GDB正常地从它的词的概念上排除了。为了“词完成”可以在这种情况下工作,可以在GDB命令中用’(单引号)把这些词包围起来。
这最适合在键入C++函数名时使用这一功能。这是因为C++允许函数重载(相同的函数有多个定义,以参数类型来区分)。例如,当你想要设置一个断点时,你可能需要区分是否是你想要的那个带有一个int型参数的name版本name(int),还是另外一个带有一个float型参数的name版本name(float)。为了在这种情况下使用“词完成”功能。在函数名的开头敲一个单引号’。这通知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(
共分享92篇相关文档