【发布时间】:2015-09-08 23:59:13
【问题描述】:
我通过将set prompt \033[1;33m(gdb) \033[0m 写入.gdbinitfile 来更改我的gdb 提示的颜色。我成功地改变了我的 gdb 提示的颜色。
但是我发现我的长命令和我的参数会在我输入一个长命令而不去换行符后覆盖我的提示。为什么?
【问题讨论】:
我通过将set prompt \033[1;33m(gdb) \033[0m 写入.gdbinitfile 来更改我的gdb 提示的颜色。我成功地改变了我的 gdb 提示的颜色。
但是我发现我的长命令和我的参数会在我输入一个长命令而不去换行符后覆盖我的提示。为什么?
【问题讨论】:
编辑:如果您的 gdb 启用了 python 脚本,请查看 @matt's answer 以了解如何使用 set extended-prompt 命令执行此操作 - 这是一个更好的解决方案。
Gdb 使用readline 包管理命令输入。告诉 readline 提示字符串中的字符序列在输出到屏幕时实际上不会移动光标的方法是用标记 RL_PROMPT_START_IGNORE(当前为 readline 的 C 头文件中的 '\001')和 RL_PROMPT_END_IGNORE 将其包围(目前'\002')。
Bash 有一种可移植的方式来表达这一点:当它在提示变量中看到"\[" 和"\]" 时,它会将它们转换为RL_PROMPT_START_IGNORE 和RL_PROMPT_END_IGNORE。 Bash 在处理各种其他转义序列(例如 \w)以包含当前工作目录时会执行此操作。
Gdb 的 set prompt 命令不支持 "\[" 和 "\]",但您可以将八进制转义符 \001 和 \002 放入您的 set prompt 字符串中(如果 readline 的作者曾经选择,则可能会更改使用一组不同的标记)。
set prompt \001\033[1;33m\002(gdb) \001\033[0m\002
【讨论】:
gdb 有一个命令:set extended-prompt,它接受gdb.prompt python module 中描述的转义序列。其中包括 \[ 和 \] bashism,用于包装不影响提示长度的字符。这当然需要启用 python 的 gdb 才能工作。
【讨论】: