Взаимодействие пользовательского интерфейса Eclipse Workbench с функциями отладчика GNU - PullRequest
1 голос
/ 08 июня 2009

Я хочу знать, как интерфейс Eclipse Workbench взаимодействует с отладчиком GNU. Что я имею в виду в Eclipse для C / C ++, когда мы нажимаем кнопки перехода, возобновления или продолжения в меню, что происходит за кулисами? Как в том, как GNU GDB вызывается? Как GDB узнает, какую функцию выполнять? Как интерфейс взаимодействует с GDB? Я добавил пользовательскую функцию в GDB (не имеет значения, что это за функция ...), и я хочу добавить кнопку в рабочую среду Eclipse, чтобы нажатие кнопки вызывало GDB и эту функцию, в частности. Я хочу знать, как пользовательский интерфейс Eclipse Workbench взаимодействует с GNU GDB. Как мне это сделать?

Спасибо, Рохит

1 Ответ

5 голосов
/ 08 июня 2009

См. Статью " Доступ к GDB с помощью Eclipse CDT и MI ".

GNU Debugger (gdb) - самый популярный отладчик с открытым исходным кодом в использовании. Обычно он используется как исполняемый файл командной строки, но доступ к нему можно получить через программное обеспечение, использующее малоизвестный протокол MI.

  • Интерфейс отладчика C / C ++ (CDI) был создан разработчиками Eclipse / CDT, чтобы CDT мог получить доступ к внешним отладчикам.
  • Машинный интерфейс (MI) был создан разработчиками GDB, чтобы внешние приложения могли обращаться к GDB.

Во многих случаях за записью результата MI следуют (gdb) и внеполосная (OOB) запись. Эти записи предоставляют дополнительную информацию о состоянии цели или среды отладки.
* Остановленное сообщение после -exec-step - это запись OOB, которая предоставляет информацию о точках останова, точках наблюдения и причинах остановки или завершения цели.
В предыдущем сеансе GDB возвращает * остановлено, причина = "диапазон конца шага" после каждого шага -exec вместе со статусом цели.

GDB / MI трудно понять людям, но он идеально подходит для связи между программными процессами.
CDT обеспечивает эту связь путем создания псевдотерминала (pty), который отправляет и получает данные. Затем он запускает GDB и создает два объекта сеанса для управления отладочными данными.

Связь MI-CDI-wrapper-Eclipse полезна только в том случае, если она обновляет графический дисплей Eclipse соответствующими данными отладки.

alt text

Если щелкнуть правой кнопкой мыши запись в представлении сигналов, опция контекстного меню «Возобновить с сигналом» позволяет продолжить выполнение цели и отправить выбранный сигнал процессу.
Эта опция вызывает SignalsActionDelegate.
Когда выбрана эта опция, делегат вызывает целевой объект CDI, чтобы возобновить его выполнение с ICDISignal, соответствующим выбранному сигналу.
Цель создает команду MI для сигнала и вызывает MISession.postCommand (), который отправляет команду в gdb.

Когда GDB отвечает, процесс обновления представления сигналов состоит из пяти шагов:

  1. MISession анализирует вывод MI из gdb и определяет, изменяется ли настройка сигнала. Если это так, он запускает MISignalChangedEvent.
  2. CDI EventManager прослушивает MISignalChangedEvent и отвечает, создавая событие CDI: ChangedEvent. Затем он запускает событие и оповещает все ICDIEventListeners.
  3. CDebugTarget получает событие от EventManager и определяет, относится ли ChangedEvent к изменению сигнала. Если это так, он вызывает свой CSignalManager для обработки события CDI.
  4. CSignalManager обновляет свои элементы модели и запускает DebugEvent, тип которого задан DebugEvent.CHANGE.
  5. SignalViewEventHandler получает DebugEvent, проверяет, обрабатывает ли он сигналы, и обновляет представление сигналов.

Понимание сопутствующей работы представления сигналов важно по двум причинам;

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

Заключение

  • Два объекта сеанса (MISession и Session),
  • две цели (CDebugTarget и Target) и
  • две совершенно разные иерархии элементов модели
...