之前已经问过问题,我看到ddd新闻组的错误报告,但没有一个建议的解决方案适合我.
它出现了,但当你尝试做一些事情,比如打开一个文件时,它会挂起"等待GDB准备好"的消息.
其他人报告的一个关键事实是,它对某些用户而不是其他用户都有效.我对环境进行了比较,但未发现任何显着差异.任何建议将非常感谢.
小智 28
也遇到了这个问题.上面发布的简单解决方案是删除〜/ .ddd /目录中的init文件.
但这意味着您的所有自定义都将消失.所以我开始寻找真正的原因.我发现只有在使用"GDB设置"对话框后才会出现问题.打开此对话框后,上面提到的init文件将会增长,因为很多gdb设置将存储在那里.
在逐步收缩这些额外的线后,我找到了"违规线".问题是由扩展提示设置引起的.打开GDB设置对话框后,该行将显示为
set extended-prompt not set\n\
Run Code Online (Sandbox Code Playgroud)
这个"未设置"是gdb将报告"show extended-prompt"的内容.Unfortunatley"设置扩展提示符是gdb中的一种错误,所以如果我在没有ddd的shell中运行的gdb中输入"set extended-prompt not set",gdb也会锁定.
看起来设置扩展提示符的唯一安全方法是它包含字符串"(gdb)".所以我修改了init文件中的违规行,现在看起来像这样:
set extended-prompt (gdb) \n\
Run Code Online (Sandbox Code Playgroud)
有了这个设置,我不再遇到问题了.希望对你的情况也有帮助.
GDB Settings...即使没有触摸任何设置,打开窗口时也会出现问题。
因为如果您自定义了 DDD 环境,则每次都删除整个~/.ddd/配置目录并不是一种可行的方法,因此我找到了一个修复该~/.ddd/init文件的解决方案,该解决方案也可以帮助您,而无需删除整个配置。
关闭 DDD 并使用文本编辑器打开该文件
~/.ddd/init
Run Code Online (Sandbox Code Playgroud)
搜索该行
set extended-prompt not set\n\
Run Code Online (Sandbox Code Playgroud)
并将其删除或替换为
set extended-prompt \n\
Run Code Online (Sandbox Code Playgroud)
保存并运行 DDD。它将按其应有的方式开始。
因为每次重复这个任务可能很乏味,特别是如果您像我一样经常更改 gdb 设置,我建议您在 shell 环境中创建一个别名,如下所示。
~/.ddd/init
Run Code Online (Sandbox Code Playgroud)
最后一种方法的优点是,它适用于 init 文件中的任何有缺陷的设置,而无需您的特定干预。
如果您不想使用 cli 来修复 init 文件,另一种方法是按照前面的建议编辑 init 文件,如果您碰巧出于任何原因打开了面板,GDB Settings...请记住在菜单中禁用Edit该选项Save Options并保留它会被禁用,直到下一次 DDD 重新启动为止。
为了完整起见(如@hmogal所述),点击
CTRL+d
Run Code Online (Sandbox Code Playgroud)
在 GDB 挂起期间,会杀死 GDB 并重新启动它,从而允许使用 DDD。不幸的是,这种方法不是一个好的解决方案,因为它会删除 init 文件内的整个 GDB 配置,甚至是您专门调整的设置。所以要注意。
一切都使用 DDD 3.2.12进行了测试。