Как просмотреть полный путь к файлу в GDB? - PullRequest
17 голосов
/ 01 февраля 2011

Когда я останавливаюсь на точке останова в GDB, он просто показывает имя файла .cpp.Как я могу просмотреть полный путь к этому файлу?

Ответы [ 3 ]

22 голосов
/ 01 февраля 2011

Используйте команду 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.
1 голос

В скриптах 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
0 голосов
/ 08 ноября 2017

Отличный ответ от Ciro Santill. Однако для работы с моим GDB 8.0.1 скрипту потребовалось небольшое исправление.

Я также изменил его, чтобы скопировать текст в буфер обмена, чтобы сразу использовать его в vim. Он прекрасно работает с плагином file_line.vim . Это пример содержимого буфера обмена, созданного сценарием:

/home/ops1/projects/test01/main.cpp:5

Сценарий ниже:

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()

Вот шаги, чтобы заставить это все работать:

  1. Установить pyperclip python-библиотеку sudo zypper в python3-pyperclip
  2. Сохраните приведенный выше скрипт в файл, скажем file-path.py и скопируйте его в ~ / .gdb
  3. Обновите ~ / .gdbinit, добавив следующие строки: источник ~ / .gdb / file-path.py
  4. Теперь вы можете скопировать путь и строку в буфер обмена с помощью clippath в gdb

Подробнее о API GDB Python - ссылка

...