【发布时间】:2022-01-10 19:44:45
【问题描述】:
通常,在 Python shell 中,我可以按两次 Tab 键来获取提示列表。
另一方面,在 gdb 的 Python shell(pi 或 python-interactive 命令)中,只有 gdb 样式的补全。
示例会话:
$ gdb -q
(gdb) pi
>>> gdb
<module 'gdb' from '/usr/share/gdb/python/gdb/__init__.py'>
>>> gdb.TabTab
... nothing ...
>>> show TabTab
Display all 148 possibilities? (y or n)
ada exec-direction record
agent exec-done-display remote
annotate exec-file-mismatch remoteaddresssize
[...]
Python 自动补全应该至少是这样的。
$ python
Python 3.X.Y ...
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.TabTab
sys.abiflags sys.hash_info
sys.addaudithook( sys.hexversion
sys.api_version sys.implementation
[...]
如何在 gdb 中获得相同/相似的东西? 特别是带有制表符完成的 IPython shell 很好。
尝试失败:
-
import readline import rlcompleter readline.parse_and_bind("tab: complete")当在
sys.或类似之后按下Tab 时,使shell 输出一个文字标签。至少它确实适用于标识符选项卡完成(
a<kbd>Tab</kbd><kbd>Tab</kbd>)确实列出了一些条目)看起来这是因为与 gdb 的一些交互 --
get_completer_delims每次都重置为某个值,如果运行上面的代码,则选项卡完成 outside gdb 切换到“Python模式”。 -
使用
background_zmq_ipython会导致分段错误,因为无法从主线程外部读取某些gdb API(例如gdb.Value)。 -
使用
IPython.embed()还可以使 Tab 输出文字制表符。 -
gdb 官方文档https://sourceware.org/gdb/current/onlinedocs/gdb/Completion.html 没有提到任何关于 Python 的内容。
【问题讨论】: