本章介绍 MDB 交互式命令行编辑和历史记录功能、输出页面调度程序以及调试器信号处理。
从终端设备输入的最后 HISTSIZE(缺省值为 128)个命令的文本 保存在内存中。接下来将介绍的内嵌编辑工具提供了用于从历史记录列表中搜索和提取元素的键映射。
如果标准输入是终端设备,则 MDB 将提供一些简单的 emacs 样式工具,以用于 编辑命令行。在编辑模式下使用 search、previous 和 next 命令可访问历史记录列表。搜索时仅匹配字符串而不匹配模式。在以下列表中,控制字符的符号为插入记号 (^) 后跟一个大写字符。转义序列的符号为 M- 后跟一个字符。例如,M-f(读作 meta- eff)是通过按下 <ESC> 再按下 'f' 输入的,或者在支持 Meta 键的键盘上按下 Meta 再按下 'f' 输入。命令行是使用回车符或换行符提交和执行的。编辑命令包括:
将光标前(右)移一个字符。
将光标前移一个字。
将光标后(左)移一个字符。
将光标后移一个字。
将光标移至行首。
将光标移至行尾。
如果当前行不为空,则删除当前字符。如果当前行为空,则 ^D 表示 EOF 并且调试器将退出。
(Meta-backspace 组合键)删除前一个字。
删除从光标到行尾的内容。
重新列显当前行。
将当前字符与下一个字符换位。
从历史记录中提取下一个命令。每次输入 ^N 后,检索时间靠前的下一个命令。
从历史记录中提取上一个命令。每次输入 ^P 后,检索时间靠后的下一个命令。
在历史记录中向后搜索包含字符串的上一个命令行。该字符串应该以回车符或换行符结尾。如果省略字符串,则将检索包含最新字符串的上一个历史记录元素。
编辑模式还会将以下用户定义的序列解释为编辑命令。可以使用 stty(1) 命令读取或修改用户定义的序列。
用户定义的删除字符(通常为 ^H 或 ^?),用于删除上一个字符。
用户定义的中断字符(通常为 ^C), 用于异常中止当前命令并列显新提示。
用户定义的中止字符(通常为 ^U), 用于中止整个当前命令行。
用户定义的退出字符(通常为 ^\), 退出调试器。
用户定义的暂停字符(通常为 ^Z), 用于暂停调试器。
用户定义的字删除字符(通常为 ^W),用于删除前一个字。
在支持 带方向键的扩展小键盘的键盘上,mdb 会将这些击键解释为编辑命令:
从历史记录中提取上一个命令(与 ^P 相同)。
从历史记录中提取下一个命令(与 ^N 相同)。
将光标后移一个字符(与 ^B 相同)。
将光标前移一个字符(与 ^F 相同)。
MDB 提供了一组快捷键,可在 MDB 提示符后面将下表列出的击键作为第一个字符键入时,将单个击键绑定到常用的 MDB 命令。快捷键包括:
执行命令 ::step over
执行命令 ::step
mdb 提供了内置的 输出页面调度程序。如果调试器的标准输出是终端设备,则会启用输出页面调度程序。每次执行命令时,mdb 都会在生成一满屏输出后暂停,并会显示页面调度程序提示:
>> More [<space>, <cr>, q, n, c, a] ? |
页面调度程序可识别以下键序:
显示下一满屏输出。
异常中止当前顶级命令并返回到提示符。
连续显示输出而不会在每一满屏时暂停,直到完成当前顶级命令为止。
显示下一行输出。
仅退出(异常中止)当前的 dcmd。
调试器会忽略 PIPE 和 QUIT 信号。INT 信号会异常中止当前执行的命令。调试器可拦截 ILL、TRAP、EMT、FPE、BUS 和 SEGV 信号,并提供相应的特殊处理。如果其中任一信号是以异步方式生成的(即使用 kill(2) 从其他进程传送),则 mdb 会将该信号恢复为其缺省部署和转储核心。但是,如果其中任一信号是由调试器进程本身同步生成的,从外部装入 dmod 中的 dcmd 当前正在执行并且标准输入是终端,则 mdb 将提供一个选项菜单,允许用户强制执行核心转储、退出而不生成核心转储、为调试器附加而停止或尝试恢复等操作。 恢复选项将异常中止所有活动的命令,并卸载出现故障时其 dcmd 处于活动状态的 dmod。然后,用户可以将其重新装入。恢复选项可针对错误的 dcmd 提供有限的保护。有关与恢复选项关联的风险的信息,请参阅警告中的“使用错误恢复机制”部分。