Я пытаюсь получить исходное местоположение текущей точки останова, желательно в виде кортежа ("file.c", 15)
.
Я знаю о команде edit
, но она не подойдет, поскольку я не хочу открывать новое окно редактора (моя цель — запустить команду tmux
, которая перейдет к точке останова в уже открытом редакторе).
Было бы здорово, если бы существовал способ того, что делает edit
, но в виде текста или просто для получения строки и файла текущей точки останова в скрипте.
Я успешно настроил команду Python, но не могу найти документацию о том, как получить доступ к текущей точке останова:
import gdb
class GetSourceLocationCommand(gdb.Command):
def __init__(self):
gdb.Command.__init__(self, "foo", gdb.COMMAND_USER)
def invoke(self, arg, from_tty):
print("hw")
breakp = gdb.selected_frame().pc()
if breakp is None:
return
print(breakp)
GetSourceLocationCommand()
Кажется, это очень просто, но я не могу найти, как это сделать.
Вам придется перебрать все точки останова с помощью gdb.breakpoints() , а затем сравнить, какая из них содержит соответствие BreakpointLocation.addressgdb.selected_frame().pc()
. Если он у вас есть, вы также можете получить доступ к BreakpointLocation.source
, в котором есть все, что вам нужно.
Благодаря ssbssa я написал реализацию:
import gdb
class GetBpSourceCommand(gdb.Command):
def __init__(self):
gdb.Command.__init__(self, "foo", gdb.COMMAND_USER)
def invoke(self, arg, from_tty):
mainPc = gdb.selected_frame().pc()
for bp in gdb.breakpoints():
for loc in bp.locations:
if loc.address == mainPc:
return loc.source
return None
GetBpSourceCommand()
Пример возвращаемого значения: ('main.c', 4)
, это то, что мне нужно.
Судя по названию
GetSourceLocationCommand
, я ожидал, что оно покажет текущее местоположение источника, независимо от текущей точки останова. Если вы выполните код пошагово, точки останова, соответствующей текущей позиции, не будет.