是否可以配置gdb
tui 界面以在另一个终端窗口中显示源代码(我可以将其放在另一个屏幕中)或使用类似的东西来模拟这种行为tmux
?
问问题
261 次
1 回答
2
我不知道有什么方法可以专门用 gdb-tui 做到这一点。与普通 gdb 或 tui 一起使用的 hack 是滥用 python prompt_hook 函数,覆盖它以根据当前文件/行产生一些效果并返回正常提示。
下面是一个示例,它使用 vim 的 +clientserver 功能在终端中启动 vim,并随着程序计数器的变化而跟随。
import os
import subprocess
servername = "GDB.VI." + str(os.getpid());
terminal = "gnome-terminal"
terminal_arg ="-e"
editor = "vimx"
term_editor = "%s --servername %s" % (editor, servername)
subprocess.call([terminal, terminal_arg, term_editor])
def linespec_helper(linespec, fn):
try:
x = gdb.decode_line(linespec)[1][0]
if x != None and x.is_valid() and x.symtab != None and x.symtab.is_valid():
return fn(x)
except:
return None
def current_file():
return linespec_helper("*$pc", lambda x: x.symtab.fullname())
def current_line():
return str(linespec_helper("*$pc", lambda x: x.line))
def vim_current_line_file():
aLine = current_line()
aFile = current_file()
if aLine != None and aFile != None:
subprocess.call([editor, "--servername", servername, "--remote", "+" + aLine, aFile])
old_prompt_hook = gdb.prompt_hook
def vim_prompt(current_prompt):
vim_current_line_file()
if old_prompt_hook != None:
old_prompt_hook(current_prompt)
else:
None
gdb.prompt_hook = vim_prompt
于 2015-05-10T12:14:01.217 回答