Браузерный интерфейс GDB для C++
Предлагаем вашему вниманию краткий обзор инструмента gdbgui. Это современный браузерный GDB (GNU-отладчик), предназначенный для языков программирования C, C++, Rust и Golang. С его помощью вы сможете просматривать трассировку стека, добавлять контрольные точки и многое другое.
Особенности установки
Установка выполняется следующим образом:
1.Для ОС Linux:
sudo pip install gdbgui –upgrade
2.Для ОС macOS:
sudo pip install gdbgui --upgrade –user
Кстати, может появиться ошибка следующего типа:
please check gdb is codesigned - see taskgated(8)
В таком случае вам помогут инструкции отсюда.
3.Для ОС Windows:
pip install gdbgui –upgrade
Тут нужно отметить, что пользователям virtualenv префикс sudo не нужен. Также можно клонировать репозиторий:
git clone https://github.com/cs01/gdbgui cd gdbgui pip install -r requirements.txt gdbgui/backend.py
Особенности запуска
Для запуска выполняем:
gdbgui [бинарный файл для отладки]
В результате в вашем браузере появится новая вкладка с инструментом gdbgui, о чём мы уже упоминали вначале.
Особенности работы
Рассмотрим ряд рабочих нюансов: • отладчик каждой программы будет открываться в отдельной вкладке (то есть для каждой вкладки будет создаваться новый GDB-экземпляр); • можно устанавливать или удалять контрольные точки; • можно просматривать стек; • можно оценивать произвольные выражения и устанавливать их значения с течением времени; • вы без проблем просмотрите все регистры; • встроен анализатор исходного кода, имеющий возможность перехода на указанную строку; • возможен показ ассемблерного кода вблизи исходников, возможно выделение текущей инструкции; • есть уведомления о доступности обновлений.
Плюсы gdbgui
Инструмент имеет ряд преимуществ: • нет ничего лишнего, он предназначен только для отладки программ; • дизайн создан под влиянием отладчика Chrome; • инструмент написан на Python и JavaScript; • gdbgui бесплатен, а его исходный код открыт.
Пример кода на C++:
#include <iostream> #include <vector> #include <map> int main(void) { std::cout << "Hello World" << std::endl; std::cout << "Example vector" << std::endl; std::vector<double> myvector {}; myvector.push_back(1.1); myvector.push_back(2.2); myvector.push_back(3.3); myvector.push_back(4.4); for (auto i : myvector){ std::cout << i << " is an element in a vector" << std::endl; } std::cout << "Example map" << std::endl; std::map<char,int> mymap; mymap['a'] = 10; mymap['b'] = 30; mymap['c'] = 50; mymap['d'] = 70; for (auto i : mymap){ std::cout << i.first << " is a key in a map with a value of " << i.second << std::endl; } return 0; }
Если интересуют другие примеры кода и make-файлы для C ++, вам сюда.