2017-04-22 63 views
2

做着ll -一直都很不方便,并且缺少语法高亮和跳转到定义的功能。如何从GDB的文本编辑器中的当前行打开当前文件?

如何在当前行上运行一个当前文件打开编辑器(可能是CLI编辑器,如Vim)的外部命令?

我已经知道编辑器插件的集成,如:https://vi.stackexchange.com/questions/2046/how-can-i-integrate-gdb-with-vim或Eclipse所述,但是从GDB打开编辑器的优点是它可以与任何编辑器一起工作,并且更轻便,因此不太可能中断。成本较差,例如不能从编辑器设置断点,但我很好。

回答

3

方法自动中心线

这段Python GDB脚本就像edit,但它也为中心的Vim当前行:

class Vim(gdb.Command): 
    """ 
Open current file in vim at a the current line. 
""" 
    def __init__(self): 
     super().__init__('vim', gdb.COMMAND_FILES) 
    def invoke(self, argument, from_tty): 
     sal = gdb.selected_frame().find_sal() 
     call(['vim', sal.symtab.fullname(), '+{}'.format(sal.line), '+normal! zz']) 
Vim() 

Vim的CLI参数的解释:How can I open vim with a particular line number at the top?

sal GDB Python对象记录在:https://sourceware.org/gdb/onlinedocs/gdb/Symbol-Tables-In-Python.html#Symbol-Tables-In-Python

不幸的是我不能使用vim --remote正确,因为我不能错过当前行:How to send commands to gvim when using --remote?

+1

只需要注意一些可以完成的扩展,可以使用vim-remote而不是每次调用新的vim会话,另请参阅gdb PR 13598,了解使编辑器遵循当前行/文件。 – matt

+0

@matt我已经研究过'--remote',但是我不能用这个选项添加行号:-(http://stackoverflow.com/questions/10311254/how-to-send-commands-to- gvim-when-using-remote让我知道你是否找到了一个方法,并将其添加到答案中。 –

+0

我认为你需要2个vim remote调用:vim --servername GDB --remote“foo.c”(to打开文件)其次是:vim --servername GDB --remote-send“:5 ”with 5〜= sal.line – matt

4

edit命令,不带任何参数,会做你想要什么。

+0

OMG,这是真的! –

+0

很少使用。FWIW我喜欢你的答案。 –

相关问题