2016-06-13 3 views
1

Я пытаюсь отлаживать программу на C++ с помощью GDB. Я установил 15 контрольных точек. Большинство точек останова находятся в разных файлах. После первых 5 контрольных точек стало трудно вспомнить, к какой строке кода относится данная точка останова.Отладка с помощью GDB - просмотр кода вокруг заданной точки останова

Я боюсь совсем немного, пытаясь вспомнить, к чему относится данная точка останова. Я нахожу это довольно отвлекающим. Мне было интересно, есть ли способ показать gdb для отображения кода вокруг определенной точки останова.

Что-то вроде этого - $(gdb) code 3 показывает 30 строк кода вокруг точки останова 3. Возможно ли это сегодня. Не могли бы вы показать мне, как?

Я запускаю gdb в режиме tui, и я также сохраняю emacs открытым для редактирования исходных файлов.

ответ

1

Я не думаю, что вы можете сделать это точно так же, как в gdb как таковом, но это может быть написано в python gdb.

Этот сырой сценарий должен помочь:

import gdb 

class Listbreak (gdb.Command): 
     """ listbreak n Lists code around breakpoint """ 

     def __init__ (self): 
       super(Listbreak, self).__init__ ("listbreak", gdb.COMMAND_DATA) 

     def invoke (self, arg, from_tty): 
       printed = 0 
       for bp in gdb.breakpoints(): 
         if bp.number == int(arg[0]): 
           printed = 1 
           print ("Code around breakpoint " + arg[0] + " (" + bp.location + "):") 
           gdb.execute("list " + bp.location) 
       if printed == 0: 
         print ("No such breakpoint") 
Listbreak() 

Скопируйте это listbreak.py, источник его в БГД (источник listbreak.py), а затем использовать его как это:

listbreak 2

4

Вы можете использовать gdb в emacs.

В emacs введите M-x gdb, после ввода названия исполняемого файла, типа M-x gdb-many-windows. Он создает интерфейс, подобный IDE, с доступом к отладчику, локальным, исходным, входным/выходным, стеку стека и точкам останова.

Вы можете найти ссылку и снимок here.

Смежные вопросы