Немного об отладке C/C++ приложений

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Приветствую, С/С++ разработчики, те, кто только изучает эти языки и просто интересующиеся! В этом посте речь пойдет об отладочном расширении Stack Scopes для Visual Studio Code.

Отладка важная часть разработки, но нужно признать, что не очень любимая большинством разработчиков. Прежде всего из-за рутинности, необходимости глубокого погружения в контекст зачастую знакомый только отчасти и часто неочевидности причин отлаживаемой проблемы. Так же критично обладать хорошими низкоуровневыми познаниями, владеть разнообразными низкоуровневыми же инструментами отладки и диагностики. Такими навыками, как правило, обладают опытные сеньоры или олдскульные гики, не признающие ничего кроме инструментов командной оболочки. Такие спецы разумеется нарасхват и всегда заняты, так что зачастую "соскочить" с отладки внезапной трудно локализуемой проблемы никак нельзя. И хорошо, если проблему вскрыли в QA, а не на боевом сервере клиента, имеется стенд и можно спокойно работать. Отлаживать небольшие приложения в пару-тройку потоков, еще и написанные и поддерживаемые лично вами легко. Совсем другое дело большие приложения с множеством модулей, легаси, десятками потоков, когда все это написано разными людьми, многие из которых уже давно уволились.

С некоторых пор в своей работе я использую в Visual Studio Code. Это прекрасная, настраиваемая, расширяемая IDE, с открытым исходным кодом и в рекламе не нуждается. Однако стандартное расширение C/C++ довольно минималистичное в отладочной части, что довольно дискомфортно когда возникает необходимость отладки Linux приложений, под Windows классический Visual Studio C++ покрывает потребности своим разнообразным интерактивным инструментарием. В nix системах доминируют консервативные порядки. Прекрасных инструментов множество, но большинство низкоуровневые. Понятно, что их освоение совершенно необходимо. Однако время самый дефицитный ресурс и отказывать себе в упрощении рутинных задач за счет интерактивных инструментов неразумно. Недавно я решил восполнить некоторые пробелы и написал расширение Stack Scopes для Visual Studio Code работающее поверх стандартного C/C++ расширения. Его основное назначение работа с дампами процессов содержащими отладочную информацию, но нет причин не использовать его для рантайм отладки, если это уместно.

Возможности Stack Scopes

  1. Панель Scopes представляет дерево из фреймов упорядоченных расположению: модуль -> функция/метод -> фрейм. Это позволяет быстро находить интересущие части кода, просматривать аргументы и переменные функций одновременно нескольких фреймов, оценивать количество вызовов отдельных функций или методов классов, анализировать на предмет рекурсий. Увидеть расположения фреймов, функций и модулей в стеках потоков можно кликнув соответствующую иконку на нужном элементе.

    https://raw.githubusercontent.com/novemus/stack-scopes/master/resources/scopes.gif

  2. Работа со стеками в боковой панели довольно неудобна. Этот недостаток призван решить Stack Graph. Его задача дать возможность подсвечивать разделяемые части кода - модули, функции, а так же объекты. Последняя колонка таблицы стека представляет пространство объекта, если содержит {...} и пространство функции, если содержит .... Для подсветки мест использования интересующих элементов нужно кликнуть мышью по нужному элементу зажав при этом клавишу Ctrl или правую кнопку мыши. То же самое можно получить кликнув соответствующую иконку на нужном элементе в дереве Scopes.

    https://raw.githubusercontent.com/novemus/stack-scopes/master/resources/graph.gif

  3. Stack Graph, как и Scopes поддерживает просмотр контекста фрейма на любую глубину. Просто кликните по иконке фрейма или переменной, чтобы раскрыть их содержимое вглубь по иерархии.

    https://raw.githubusercontent.com/novemus/stack-scopes/master/resources/unfold.gif

  4. Scopes и Stack Graph поддерживают навигацию по исходному коду соответствующих фреймов. Разумеется, если такой код имеется, и программа содержит отладочную информацию.

    https://raw.githubusercontent.com/novemus/stack-scopes/master/resources/reveal.gif

  5. Как правило, отладчики показывают содержимое только первых элементов динамических массивов, так как не знают его размера. Следующие элементы можно сгенерировать с помощью выражений в окне наблюдения или непосредственно в дереве Scopes. Оно умеет распознавать динамические массивы, если их типы определены без typedef как обычные указатели. Такие переменные имеют специальный узел ... клик по которому генерирует следующий элемент массива.

    https://raw.githubusercontent.com/novemus/stack-scopes/master/resources/evaluate.gif

  6. Иногда нужно найти в стеке ссылки на некоторые переменные, в том числе и вложенные в другие. Для этого реализована функция поиска по стеку. Вызвать ее можно из контекстного меню переменной в Stack Graph или кликом по иконке поиска на нужной переменной в дереве Scopes. Результаты поиска отобразятся в окне References.

    https://raw.githubusercontent.com/novemus/stack-scopes/master/resources/search.gif

  7. Для удобства работы со стеками в окне Stack Graph имеется режим минимизации, позволяющий просматривать только подсвеченные стеки. Кнопка в правом верхнем углу позволяет переключаться между режимами.

    https://raw.githubusercontent.com/novemus/stack-scopes/master/resources/minimize.gif

Для всех команд имеется возможность настроить горячие клавиши.

Расширение Stack Scopes свободное с открытым исходным кодом доступное для использования всеми кто найдет его полезным. В планах развивать его дальше и в перспективе дополнить функционалом профилирования, анализа кучи, создав полнофункциональный отладочный инструмент. Приглашаю всех заинтересованных, готовых внести свой вклад к совместной работе.

Источник: https://habr.com/ru/post/591273/


Интересные статьи

Интересные статьи

Я давно знаком с Битрикс24, ещё дольше с 1С-Битрикс и, конечно же, неоднократно имел дела с интернет-магазинами которые работают на нём. Да, конечно это дорого, долго, местами неуклюже...
Тренировочный центр для бортпроводников. Видно надувной трап, модель такого же трапа в виде плота для бассейна. И напротив всего этого сауна. Потому что в Финляндии не могут построить бассейн ...
Друзья, это становится доброй традицией. Мы не встречались почти 11 месяцев – прошлая наша встреча была накануне Нового года и у самого Кремля. А в этом году Node.js исполнилось 10 лет, а это зна...
Реализация ORM в ядре D7 — очередная интересная, перспективная, но как обычно плохо документированная разработка от 1с-Битрикс :) Призвана она абстрагировать разработчика от механики работы с табл...
Один из самых острых вопросов при разработке на Битрикс - это миграции базы данных. Какие же способы облегчить эту задачу есть на данный момент?