Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
C++DatabaseDelphiIDETech PartnerНовости

Новый плагин IDE: параллельный отладчик Parnassus

parallel debugger demo screenshot 3

Расширенная разметка редактора кода, пользовательский интерфейс стека вызовов и инструменты многопоточной отладки — в новом подключаемом модуле для RAD Studio теперь доступны бесплатно.

Мы очень рады объявить о доступном сегодня новом расширении IDE для RAD Studio 10.4.1, созданном тем же автором, что и популярные плагины для закладок и навигатора, Parnassus. Если вы читаете это, он уже доступен в GetIt для всех, у кого есть подписка на обновления: просто откройте GetIt, перейдите в раздел «Плагины IDE» и установите «Параллельный отладчик». Для этого требуется Delphi или C ++ Builder 10.4.1 или новее.

Что это такое?

  • Инструмент для отладки многопоточных приложений
  • … А также помогает отлаживать традиционные однопоточные приложения!

Что-то для каждого. Читайте дальше!

editor before and after 2

Некоторая новая разметка редактора, полезная для вас, даже если вы не используете несколько потоков в своем приложении!

Проблема

Если в вашем приложении более одного потока, вы, вероятно, захотите отладить взаимодействие потоков. Традиционное представление отлаженного приложения в среде IDE, хотя в нем может быть указано несколько потоков в представлении потоков, заключается в том, чтобы рассматривать приложение так, как будто оно имеет только один поток: вы увидите только один стек вызовов и элементы управления запуском / паузой / шагом предназначены для всего процесса. Это оставляет вас, разработчика, который должен отлаживать ваше приложение, с такими вопросами, как:

  • Как узнать, работают ли одновременно несколько потоков в одном коде?
  • Как мне узнать, что делают все мои потоки одновременно?
  • Как выполнить метод всего в одном потоке?
    То есть, как мне отлаживать один поток без запуска других потоков и выполнения кода, который я не хочу, чтобы они не попадали в точки останова и т. Д.?
  • Сколько ЦП использует каждый из моих потоков? Они эффективны?

И, возможно, другие вопросы или пожелания, даже отладка только в одном потоке, например:

  • Я бы хотел, чтобы все методы в стеке вызовов были выделены в моем коде легко.
  • Хотел бы я легко сделать точку останова применимой только к определенному потоку
  • Я бы хотел, чтобы разметка редактора, показывающая текущую строку кода, выглядела более очевидной.
  • Я хочу, чтобы при приостановке процесса он не выводил меня в представление CPU, а показывал мне только мой собственный источник

На каждый из этих вопросов отвечает этот новый плагин.

Давайте пробежимся по его особенностям. В следующем разделе вы прочитаете о представлении Parallel Threads и стеках параллельных вызовов; поточный запуск и пошаговое выполнение; вид процесса; новая разметка редактора, включая потоки и стеки вызовов в редакторе; установка сродства потока точки останова; перемещение текущего исполнения; новое главное меню темы; и больше…

Представление «Параллельные потоки»

Просмотр> Окна отладки> Параллельные потоки

В этом окне перечислены все потоки в процессе, перечисленные по горизонтали. Когда ваше приложение работает, если оно в Windows, у каждого потока есть диаграмма, отображающая использование ЦП.

parallel threads cpu

Когда приложение приостановлено, каждый поток отображает свой стек вызовов.

parallel threads call stack

  • Каждому потоку назначается уникальный цвет , начиная со среднего синего для основного потока приложения. Этот цвет используется в качестве визуального ориентира для повсеместной идентификации нити.
  • Отображаются названия потоков . Даже если вы не называете свой основной поток, Parallel Debugger достаточно умен, чтобы его обнаружить.
  • Текущая резьба выделена полужирным шрифтом и имеет тонкую рамку своего цвета вокруг нее. Дважды щелкните заголовок обсуждения (его имя), чтобы сделать его текущим.
  • Записи стека вызовов без исходного кода, т. Е. Не подлежащие отладке без использования представления ЦП, по умолчанию свернуты. Вы можете расширить их (или отключить, чтобы отобразить традиционный стек вызовов).

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

Крайняя левая кнопка на каждой панели инструментов потока приостанавливает весь процесс, делая этот поток текущим потоком. Это «приостановить процесс в этом потоке». Крайняя правая кнопка позволяет вам изменять порядок отображения потоков, закрепляя потоки слева или рядом с другим закрепленным потоком. Это полезно, когда в вашем приложении много потоков, и вы хотите, чтобы те, которые вам интересны, были сгруппированы вместе. Если закрепленный поток имеет имя, закрепление сохраняется при перезапуске процесса: когда вы завершаете и перезапускаете приложение, те же потоки будут закреплены.

Запуск или переход по одному потоку

Остальные кнопки панели инструментов предназначены для управления ходом резьбы.

Стандартные средства управления запуском, переходом, переходом и т. Д. В среде IDE являются уровнями процесса; то есть они будут запускать весь процесс, пробуждая все потоки, и вы просто надеетесь, что больше ничего не произойдет, пока операция перехода не будет завершена в потоке, который вы просматриваете. На практике может многое — исключения, точки останова и т. Д. — плюс, конечно, иногда вы просто хотите убедиться, что другие потоки не запускаются при отладке одного потока.

thread control buttons onlyЭти кнопки панели инструментов позволяют запускать и переходить на уровень потока. Вы можете:

  • Запустить только этот поток, оставив все остальные потоки приостановленными
  • Оставить этот поток приостановленным, но запустить все остальные потоки
  • Войдите в метод, только в этой ветке
  • Переступайте через строку кода только в этом потоке. Это позволяет запускать и шагать только этот поток; никакие другие потоки не могут работать одновременно
  • Запускать до возврата из метода, только для этого потока

Чтобы использовать их, убедитесь, что интересующий вас поток является текущим, дважды щелкнув его заголовок или имя. Вы увидите, что название выделено жирным шрифтом.

У каждого из них есть сочетание клавиш, то есть вы можете выполнять действия (и т. Д.) С помощью клавиатуры, а не просто нажимая кнопку с помощью мыши. Ярлыки отображаются в меню «Тема», в котором есть пункты меню для текущей цепочки (см. Ниже).

Управление запуском потока — одна из самых мощных функций Parallel Debugger.

Интеграция редактора

Одна из важных задач при понимании того, что происходит в многопоточном приложении, — это знать, когда несколько потоков выполняются в одной и той же области кода. Parallel Debugger делает это понятным, добавляя разметку в редакторе для полного стека вызовов каждого потока. Они отображаются с помощью «тегов», небольших цветных маркеров в правой части редактора.

Верхняя запись стека вызовов — то есть там, где поток выполняется «сейчас» — помечена сплошным тегом с использованием цвета потока. Другие записи стека вызовов для того же потока имеют бледную версию цвета потока (отмечая, что поток все еще отмечен сплошным кружком в теге).

editor tags 2

Это позволяет вам быстро читать код и знать, что «поток X выполняется где-то внутри этой строки кода» и «поток Y и поток Z сейчас находятся в одном методе». Вы даже увидите, где именно находятся нити. На этом снимке экрана текущий поток — синий, а второй поток (светло-красный) выполняется со своей текущей точкой выполнения внутри IsPrime (), но вызов IsPrime выделил строку над точкой выполнения текущего потока.

Перемещение исполнения

Перед установкой плагина в среде IDE точка выполнения текущего потока отображалась маленькой синей стрелкой. Теперь он заменен большим шевроном в левой части редактора кода.

moving execution point

Вы можете изменить положение точки выполнения — где поток начнет выполняться в следующий раз, когда вы нажмете «Выполнить» или «Шаг» — просто щелкнув и перетащив этот маркер.

Сходство потока точки останова

thread affinity menu

По умолчанию точки останова применяются ко всем потокам. Перед установкой плагина точки останова были нарисованы с помощью красной точки, но с потоками Parallel Debugger выделены цвета, а красный цвет означает красную ветку. Точки останова, которые применяются ко всем потокам, теперь отображаются в виде разноцветного колеса.

Чтобы точка останова применялась только к определенному потоку, щелкните точку останова правой кнопкой мыши. Новое меню точки останова позволяет вам выбрать поток, к которому будет применяться точка останова.

breakpoint green thread 4

Здесь эта точка останова применяется только к зеленому потоку.

Обзор процесса

Просмотр> Отладка Windows> Процесс

process view 2

В этом окне отображается информация о процессе в целом. Он отображает использование ЦП на уровне процесса (снова разделенное на ядро ​​и пользовательский режим), тип процесса (например, Wow64), а также кнопки запуска / паузы / сброса и т. Д. Это уровень процесса, то есть они обеспечивают ту же функциональность, что и собственная панель инструментов запуска среды IDE.

Вы также можете просмотреть список потоков, нажав кнопку внизу, как быстрый способ выбрать текущий поток (поскольку горизонтальная прокрутка в представлении потоков может занять больше времени, если у вас много потоков).

Главное меню темы

thread main menu

В среде IDE теперь есть меню «Поток», расположенное справа от меню «Выполнить». Это предоставляет меню для большинства прямых операций, которые вы можете выполнять с потоком. Он позволяет вам установить интересующий поток (то есть текущий поток, если процесс приостановлен, или поток, который вы хотите стать текущим потоком в следующий раз, когда вы приостановите), а для текущего потока есть пункты меню для управления запуском потока. Вы можете видеть ярлыки в этих пунктах меню.

Он также перечисляет каждый поток в приложении, и для каждого из них показано, что вы выполняете управление плюс закрепление, фактически те же функции, что и в представлении Parallel Threads.

Уровень функций

thread menu feature level 2

Наконец, самый верхний пункт меню контролирует уровень функций Parallel Debugger: что он делает, когда ваше приложение работает. Самый низкий уровень предназначен только для отслеживания использования ЦП: используйте его, если вы хотите, чтобы параллельный отладчик был установлен, но в настоящее время вы не хотите активно использовать его для этого приложения. Следующие два уровня контролируют, насколько глубоко отладчик отслеживает стеки вызовов потоков.

Используйте это, если у вас есть десятки или сотни потоков. В этой ситуации вас, вероятно, интересует только подмножество потоков. Установите уровень функции на «Только выбранные стеки вызовов», и параллельный отладчик будет отслеживать стеки вызовов для основного потока, закрепленных потоков и текущего потока только по умолчанию. Вы всегда можете получить стек вызовов для любого потока, нажав кнопку, отображаемую над областью стека вызовов в представлении потоков.

Поддерживаемые платформы

Параллельный отладчик имеет полную функциональность при локальной отладке приложений в Windows.

На других платформах или при удаленной отладке функциональность зависит от того, что поддерживает отладчик. Использование ЦП поддерживается только для локальных (без удаленной отладки) приложений Windows. Пошаговое выполнение или выполнение отдельных потоков будет работать только на платформах, поддерживающих замораживание потоков. Существует известная проблема для C ++ Win64, когда стеки вызовов не могут быть оценены: это будет исправлено в следующей версии C ++ Builder.

Следуя традиции Парнаса, начатой ​​с закладок, параллельный отладчик действительно решает ошибку! ( RSP-29768 .)

В общем: если вы используете Windows, отладчик имеет полную функциональность.

Плагин поддерживает RAD Studio 10.4.1 (и новее, когда выйдет 10.4.2.)

Получение параллельного отладчика

Параллельный отладчик теперь в GetIt!

Благодаря Embarcadero Parnassus делает отладчик бесплатным для всех клиентов RAD Studio с активной подпиской на обновления. Откройте GetIt, перейдите в категорию подключаемых модулей IDE и нажмите «Установить».

И Parnassus, и Embarcadero надеются, что вы найдете это расширение отличным дополнением к вашей IDE.

От себя лично я хотел бы поблагодарить Embarcadero за интерес к плагину и желание добавить его в GetIt, а также всех моих бета-тестеров, которые с августа использовали различные версии этого плагина, качество которых постепенно улучшалось. Всем большое спасибо!

parallel debugger demo screenshot 3


Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.
Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

IN THE ARTICLES