为什么我的 gdb 提示在我更改颜色后显示错误

Why my gdb prompt shows wrong after I change its color

我通过将 set prompt 3[1;33m(gdb) 3[0m 写入 .gdbinit 文件来更改 gdb 提示符的颜色。我成功地更改了 gdb 提示符的颜色。

但是我发现在我输入长命令而不换行后,我的带参数的长命令会覆盖我的提示。为什么?

编辑:如果您的 gdb 启用了 python 脚本,请查看 了解如何使用 set extended-prompt 命令执行此操作 - 这是更好的解决方案。

Gdb 使用 readline 包管理命令输入。告诉 readline 提示字符串中的字符序列在输出到屏幕时实际上不会移动光标的方法是用标记 RL_PROMPT_START_IGNORE 将其包围(目前在 readline 的 C 头文件中为 '[=13=]1')和 RL_PROMPT_END_IGNORE(目前 '[=15=]2')。

Bash 有一种可移植的表达方式:当它在提示变量中看到 "\[""\]" 时,它会将它们转换为 RL_PROMPT_START_IGNORERL_PROMPT_END_IGNORE。 Bash 在处理各种其他转义序列时执行此操作,例如 \w 以包含当前工作目录。

Gdb 的 set prompt 命令不支持 "\[""\]",但您可以在 set prompt 字符串(如果 readline 的作者选择使用不同的标记集,可能会发生变化)。

set prompt [=10=]13[1;33m[=10=]2(gdb) [=10=]13[0m[=10=]2

gdb 有一个命令:set extended-prompt that accepts escape sequences described in the gdb.prompt python module。其中包括 \[ 和 \] bashism,用于包装不影响提示长度的字符。这当然需要 python 启用 gdb 才能工作。