Когда я останавливаюсь в точке останова в gdb, он просто показывает filename.cpp. Как просмотреть полный путь к этому файлу?
Как просмотреть полный путь к файлу в GDB?
Ответ 1
Используйте команду info source
, чтобы получить информацию о текущем фрейме стека.
Вот пример его вывода:
(gdb) info source Current source file is /build/gtk+2.0-LJ3oCC/gtk+2.0-2.24.30/modules/input/gtkimcontextxim.c Located in /home/sashoalm/Desktop/compile/gtk+2.0-2.24.30/modules/input/gtkimcontextxim.c Contains 1870 lines. Source language is c. Producer is GNU C11 5.3.1 20160225 -mtune=generic -march=i686 -g -g -O2 -O2 -fstack-protector-strong -fPIC -fstack-protector-strong. Compiled with DWARF 2 debugging format. Does not include preprocessor macro info.
Ответ 2
В сценариях на Python
Изучить скрипты Python или просмотреть только полный путь и ничего:
class Curpath(gdb.Command):
"""
Print absolute path of the current file.
"""
def __init__(self):
super().__init__('curpath', gdb.COMMAND_FILES)
def invoke(self, argument, from_tty):
gdb.write(gdb.selected_frame().find_sal().symtab.fullname() + os.linesep)
Curpath()
Использование:
curpath
Ответ 3
Отличный ответ от Сиро Сантилла. Тем не менее, script потребовалась небольшая коррекция для работы с моим gdb 8.0.1.
Я также изменил его, чтобы скопировать текст в буфер обмена, чтобы сразу использовать его в vim. Он отлично работает с file_line.vim. Это пример содержимого буфера обмена, созданного script:
/home/ops1/projects/test01/main.cpp:5
script находится ниже:
import pyperclip
class Clippath (gdb.Command):
"""print absolute path"""
def __init__(self):
super(Clippath, self).__init__("clippath", gdb.COMMAND_USER)
def invoke(self, arg, from_tty):
symtabline = gdb.selected_frame().find_sal()
pyperclip.copy(symtabline.symtab.fullname() + ":" + str(symtabline.line))
Clippath()
Вот шаги, чтобы все это работало:
- Установить библиотеку python pyperclip sudo zypper в python3-pyperclip
- Сохраните script выше в файл, скажем file-path.py и скопируйте его в ~/.gdb
- Обновить ~/.gdbinit с добавлением следующих строк: source ~/.gdb/file-path.py
- Теперь вы можете скопировать путь и строку в буфер обмена с помощью
clippath
в gdb
И подробнее о API-интерфейсе GDB Python - ссылка