Отладчик

Материал из Вики проекта PascalABC.NET
Версия от 13:44, 20 июня 2009; Ibond (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

В PascalABC.NET реализован отладчик, включающий в себя:

  • основные команды: F7 (шаг с входом в подпрограмму), F8 (шаг без входа в подпрограмму), F4 (переход к курсору), F10 (выход из подпрограммы)
  • окно Watch
  • окно локальных переменных
  • всплывающие подсказки значений переменных
  • точки останова (breakpoint), в т. ч. условные точки останова

Детали реализации

В PascalABC.NET используется сторонняя библиотека Debugger.Core из SharpDevelop. По сути библиотека Debugger.Core - это managed-обертка над COM-интерфейсами, предоставляющих средства для отладки .NET-приложений. Существует альтернативная библиотека mdbgcore, входящая в Windows SDK. Библиотека Debugger.Core позволяет вычислять значения выражений на этапе отладки. Для представления значения используется класс Value.

Вычисление выражений в окне Watch

При изменении состояния отладчика (переход к следующей точке останова) вычисляются все выражения в окне Watch. Для выражения строится синтаксическое дерево и далее визитором ExpressionEvaluator по дереву вычисляется значение выражения. Поиск имен происходит согласно семантике PascalABC.NET. То есть, сначала ищется среди локальных переменных текущей подпрограммы, далее в объемлющих подпрограммах, в классе, модуле, подключенных модулях и пространств имен. Список подключенных модулей и пространств имен хранится в атрибуте класса-обертки над модулем. Кроме того в exe-файл сохраняется информация об используемых в модуле пространств имен .NET.

В библиотеке Debugger.Core также предусмотрен случай, когда выражение вычисляется слишком медленно. В таком случае выводится сообщение: Выражение слишком долго вычисляется. В Watch не отсутствует поддержка вызовов функций (только стандартные функции без побочного эффекта). Однако в разработке находится окно Immediate, в котором можно будет вызывать функции и методы.