Уровень сложности: средний Эрик Джонсон, инженер-программист, консультант, IBM
14.04.2008 Узнайте, как использовать IBM Database Add-Ins for Visual Studio 2005 для отладки хранимых процедур, написанных на языке SQL. Узнайте также о том, какие изменения произошли в поддержке SQL-отладки в сравнении с предыдущими версиями DB2 Tools for Visual Studio. В новой версии значительно упростился процесс создания, отладки, изменения и перекомпоновки хранимых SQL-процедур.
Введение
Программный продукт IBM® Database Add-Ins for Visual Studio® 2005 предоставляет расширенные возможности для отладки хранимых SQL-процедур. Если вы знакомы с процессом отладки приложений, написанных на таких языках как C#, Visual Basic или C++ (с использованием Microsoft Visual Studio 2005), то обнаружите, что отладка DB2® SQL-процедур аналогична.
Способы создания хранимых процедур с поддержкой отладки и способы запуска отладчика были упрощены в Visual Studio 2005. В Visual Studio 2003 существовало два различных окна, отображавших исходный код процедуры: одно использовалось для отладки, а второе - для изменений и перекомпоновки. В Visual Studio 2005 имеется одно окно исходного кода для процедуры, используемое как для создания, так и для отладки. Это делает процесс создания, отладки, изменения и перекомпоновки хранимой процедуры более легким в управлении.
Чтобы получить наибольшую пользу от данной статьи, вы должны быть знакомы с использованием IBM Database Add-Ins for Visual Studio для создания соединений с базой данных и работы с объектами базы данных, например, таблицами и хранимыми процедурами. Хорошим способом познакомиться с IBM Database Add-Ins for Visual Studio является изучение серий учебных руководств "Обзор программы IBM Database Add-Ins for Visual Studio 2005" и "Разработка экспериментальных .NET-приложений".
В данной статье рассматриваются отладочные возможности DB2 Database Add-Ins for Visual Studio 2005, Version 9, Fix Pack 2. Отладочные возможности более ранних версий IBM Database Add-Ins for Visual Studio 2005 были аналогичными, но некоторые незначительные отличия будут также рассмотрены.
Создание хранимых процедур
Чтобы иметь возможность отладки хранимых SQL-процедур, их нужно создавать с поддержкой отладки. IBM Database Add-Ins предоставляет два различных способа создания пригодных для отладки хранимых процедур: конструктор хранимых процедур и проект базы данных DB2. Перед применением одного из этих способов необходимо создать соединение с базой данных в Server Explorer. Подробная информация по созданию соединений приведена в разделе "Интеграция Server Explorer" статьи "Обзор программы IBM Database Add-Ins for Visual Studio 2005".
Конструктор хранимых процедур
После создания соединения разверните узел connection. Щелкните правой кнопкой мыши на узле Procedures и выберите Add new SQL Procedure with Designer.
Рисунок 1. Откройте конструктор хранимых процедур для новой процедуры
Используйте инструментальную программу designer для создания новой хранимой процедуры. Убедитесь в том, что поле Debug mode установлено в значение ALLOW, разрешающее отладку.
Рисунок 2. Установите режим отладки для процедуры в конструкторе процедур
Конструктор хранимых процедур можно использовать для отладки хранимых SQL-процедур, которые уже существуют, но не были изначально созданы с поддержкой отладки. Для этого разверните узел Procedures в вашем соединении и щелкните правой кнопкой мыши на процедуре, которую хотите отлаживать. Выберите Open Definition, чтобы открыть конструктор для данной процедуры. Затем установите режим отладки в значение ALLOW и сохраните процедуру.
Рисунок 3. Откройте существующую процедуру в конструкторе процедур
DB2-проект
Создать хранимые SQL-процедуры для отладки можно также с использованием DB2-проекта. Прежде всего, создайте новый DB2-проект или откройте существующий.
Создание хранимых процедур в режиме отладки требует использования конфигурации проекта с разрешенным свойством Build for Debug. При создании нового DB2-проекта создаются две его конфигурации: Debug и Release. Изначально свойство Build for Debug разрешено в конфигурации Debug, но не в Release. Проверить настройки проекта можно на страницах свойств проекта. Щелкните правой кнопкой мыши на вашем проекте и выберите Properties. Появится редактор страницы свойств проекта.
Рисунок 4. Проверьте или измените настройку Build for Debug в конфигурациях вашего проекта
После создания хранимых процедур с использованием DB2-проекта необходимо обновить узел Procedures в соединении, для того чтобы увидеть новые хранимые процедуры.
Запуск отладчика
В отличие от процесса отладки исходного кода, написанного на других языках, таких как Microsoft Visual Basic или Microsoft C#, SQL-отладчик IBM не запускается из проекта. Вместо этого отладка запускается из DB2-соединения в Server Explorer или из конструктора хранимых процедур.
Для запуска отладки из DB2-соединения в Server Explorer разверните ваше соединение под Data Connections, а затем разверните узел Procedures. Щелкните правой кнопкой мыши на SQL-процедуре, которую хотите отлаживать, и выберите Step Into.
Рисунок 5. Запустите SQL-отладчик из узла процедуры в Server Explorer
Для запуска отладчика из конструктора хранимых процедур сначала откройте конструктор, как было описано выше. Установите режим отладки процедуры в значение ALLOW и сохраните все сделанные изменения. Затем выполните любое из следующих действий для запуска отладчика: нажмите кнопку Step Into панели инструментов конструктора хранимых процедур, выберите пункт меню Step Into в меню верхнего уровня IBM Procedure Designer или пункт меню Step Into в контекстном меню, доступном при щелчке правой кнопкой мыши в конструкторе процедур.
Следующим шагом при запуске отладчика является диалоговое окно Run Options. Здесь можно указать начальные значения для любых входных параметров. При желании вы можете указать, выполнять ли автоматически фиксацию в конце хранимой процедуры, а также SQL-сценарии, которые нужно запускать до и после отладки хранимой процедуры. Сами эти сценарии (pre-run или post-run) не отлаживаются.
Рисунок 6. Диалоговое окно Run Options
Теперь отладчик должен запуститься и автоматически остановиться на первой строке хранимой процедуры. Текущая позиция отмечается желтым маркером в левом поле. После остановки выполнения на первой строке можно установить точки останова. Затем можно продолжить выполнение, используя любую пошаговую операцию.
Рисунок 7. Текущая позиция отмечается желтым маркером в левом поле
Состояние задания IBM-отладчика
При запуске и выполнении отладчика SQL-процедур отображается окно IBM Debugger Task Status. Это - плавающее инструментальное окно, но его можно прикрепить, аналогично любому другому окну в Visual Studio.
Окно состояния задания показывает действия, выполненные при старте и остановке отладчика. Иногда может быть необходимо остановить некоторые из этих действий, если они выполняются слишком долго. При выполнении задания, которое может быть отменено, разрешается кнопка Cancel. Это окно отображается только в Version 9 Fix Pack 2 и старше.
Рисунок 8. Окно IBM Debugger Task Status позволяет отменить сеанс отладки, если процесс запуска выполняется слишком долго
Представления отладчика
При отладке хранимых SQL-процедур имеется несколько функциональных возможностей, доступных для проверки текущего состояния процедуры. Их можно использовать только при остановке отладчика в хранимой процедуре.
Представление Local variables (локальные переменные)
Представление Local variables (локальные переменные) можно отобразить, выбрав меню верхнего уровня Debug, каскадное меню Windows и далее пункт меню Locals. Оно показывает все локальные переменные и параметры, видимые в текущей позиции. Показываются также диагностические переменные SQLCODE и SQLSTATE. Значения переменных можно обновить.
Рисунок 9. Просматривайте и изменяйте любую переменную в представлении Local variables
Представление Auto variables (автоматические переменные)
Представление Auto variables (автоматические переменные) можно отобразить, выбрав меню верхнего уровня Debug, каскадное меню Windows и далее пункт меню Autos. Оно показывает все переменные, на которые есть ссылки в текущих и соседних строках. Показываются также диагностические переменные SQLCODE и SQLSTATE. Значения переменных можно обновить.
Рисунок 10. Просматривайте и изменяйте переменные в представлении Auto variable
Представление Watch (наблюдение)
Аналогично представлениям Locals и Autos, к представлению Watch (наблюдение) можно обратиться из меню верхнего уровня Debug и каскадного меню Windows. В данном случае имеется еще одно каскадное меню, Watch, в котором можно выбрать любой из пунктов меню Watch 1, Watch 2, Watch 3 или Watch 4. Каждое из окон Watch позволяет ввести имя переменной, значением которой вы интересуетесь. Показываются только эти переменные. Это представление полезно, если отлаживаемая хранимая процедура содержит большое количество переменных, а вы интересуетесь только некоторыми. Можно также выбрать переменные в исходном коде хранимой процедуры и переместить их в окно Watch.
Рисунок 11. Просматривайте и изменяйте выбранные вами переменные в представлении Watch variable
Представление Hover variables
Можно просмотреть значение любой переменной, наведя курсор на ее имя в исходном коде процедуры. Для изменения ее значения нажмите левую кнопку мыши во всплывающем представлении или щелкните правой кнопкой и выберите пункт Edit Value из контекстного меню.
Рисунок 12. Просматривайте и изменяйте переменные, помещая над ними курсор
Стек вызовов
Аналогично многим другим представлениям, это представление можно активизировать, выбрав меню верхнего уровня Debug, каскадное меню Windows и далее пункт меню Call Stack. При отладке вложенных хранимых процедур, в которых выполняется вызов других хранимых SQL-процедур, это представление может показать, какие строки в других процедурах вызывают текущую процедуру. Стек вызовов отображается сверху вниз: текущая процедура вверху, затем вызвавшая ее процедура и т.д. Выполнив двойной щелчок кнопкой мыши на названии любой из процедур, можно увидеть позицию в ней, из которой был активизирован вызов. Можно также просмотреть переменные, находящиеся в области видимости каждой из вызывающих процедур, используя представление локальных переменных или любые другие представления переменных.
Рисунок 13. Представление стека вызовов
Операции отладчика
При остановке хранимой процедуры в точке останова имеется возможность проверить состояние ее выполнения, как описано выше. Кроме просмотра можно изменить значения переменных. Существует несколько вариантов продолжения выполнения хранимой процедуры.
Изменение значений переменных
В любом из описанных выше представлений значений переменных (локальные переменные, автоматические переменные, наблюдаемые переменные и всплывающее представление) имеется возможность изменить значения переменных. Обычно это делается путем выбора значения переменной, ее активации при помощи двойного щелчка или нажатия F2 и ввода нового значения. Для изменения значения переменной в NULL, используйте (NULL). Значения SQLCODE и SQLSTATE изменить нельзя.
Выполнение в пошаговом режиме
Поддерживаются следующие типы пошагового выполнения: step over (шаг с обходом процедур), step into (шаг с заходом в процедуру) и step out (шаг с выходом из процедуры). Кроме пошагового режима можно остановить выполнение или продолжить выполнение до приостановки или до точки останова.
Step over вызывает продолжение выполнения до следующей точки в текущей процедуре. При остановке на операторе CALL step into вызывает продолжение выполнения с первой строки вызываемой подпрограммы. Если вызываемая подпрограмма не является SQL-процедурой, поддерживающей отладку, или если выполнение не остановилось на операторе CALL, step into работает точно так же, как и step over.
Step out вызывает продолжение выполнения до наступления одного из следующих условий: достигнута точка задержки (stopping point) в процедуре, вызвавшей текущую, активизирована точка останова, выполнился выход из процедуры.
Точки задержки напрямую не соответствует строкам исходного кода. Обычно точки задержки определяются в каждом месте исходного кода, где значения переменных читаются или изменяются, операторы управления влияют на ход выполнения и встречаются операторы call. Точные операторы, содержащие точки задержки, зависят от платформы. Одна строка кода может иметь несколько точек задержки. Это происходит при наличии в одной строке нескольких операторов. На некоторых платформах это возможно при наличии нескольких объявлений переменных в одной строке. Если в одной строке имеется несколько точек задержки, операции step into или step over в этой строке приведут к остановке выполнения на ней же.
Операция Stop Debugging приводит к прерыванию процедуры без ее завершения. В этом случае в панели результатов отладки отображается исключительная ситуация, указывающая на прерывание процедуры. При остановке процедуры не выводятся какие-либо выходные параметры или возвращаемые наборы переменных.
Операция Continue вызывает продолжение выполнения либо до активизации точки останова, либо до выхода из процедуры.
Все эти операции управления выполнением доступны из основного меню Debug в Visual Studio, когда выполнение прерывается или останавливается на точке останова.
Точки останова
Существует два типа точек останова, поддерживаемых отладчиком SQL-процедур: line breakpoints (точки останова для строки) и variable breakpoints (точки останова для переменной).
Точки останова для строки
Точки останова для строки могут быть установлены в любой строке с использованием точек задержки. Точки останова для строки вызывают остановку выполнения процедуры при достижении точки задержки. Самым простым способом установки точки останова для строки является нажатие левой кнопки мыши на левом поле рядом со строкой.
Рисунок 14. Маркер точки останова указывает месторасположение точки останова для строки
Если точку останова установить в строке, не содержащей точек задержки, эта точка останова никогда не будет активизирована, а также не будет иметь никакого влияния на работу процедуры.
Точки останова для переменных
Точки останова для переменных активизируются, когда значение переменной изменяется. Для установки такой точки нажмите левую кнопку мыши на имени переменной в исходном коде хранимой процедуры и правую кнопку для активации контекстного меню. Выберите каскадное меню Breakpoints и пункт Insert variable breakpoint.
Рисунок 15. Создание точки останова для переменной
Всегда, когда изменяется значение переменной, выполнение процедуры останавливается в следующей точке задержки после изменения значения, и появляется сообщение об этом изменении.
Окно Breakpoints
Для активизации инструментального окна Breakpoints используйте меню верхнего уровня Debug, активизируйте каскадное меню Windows и выберите Breakpoints. Это инструментальное окно может также использоваться для удаления точек останова, включая точки останова для переменных. Для удаления точки останова в окне Breakpoints щелкните правой кнопкой мыши на ней и выберите Delete. Альтернативным способом удаления точки останова является щелчок на ней левой кнопкой мыши в левом поле редактора исходного кода хранимой процедуры.
Рисунок 16. Просмотр и изменение точек останова
Инструментальное окно Breakpoints может использоваться для установки числа проходов (hit count) для точки останова. Для этого щелкните правой кнопкой мыши на точке останова в окне Breakpoints и выберите Hit Count.... Эта настройка в диалоговом окне Breakpoint Hit Count позволяет активизировать точку останова: всегда, только при равенстве числа проходов точки указанному значению, только при значении числа проходов, большему указанного значения, или только тогда, когда число проходов кратно указанному значению.
 |
Отладка SQL-процедур в базах данных DB2 for z/OS Version 8
Имеется несколько важных отличий при отладке баз данных DB2 for z/OS V8.
В DB2 for z/OS V8 процесс отладки требует использования программы-демона debugger, работающего на клиентской рабочей станции, где выполняется Visual Studio 2005. Информация по настройке демона debugger приведена в разделе "Настройки отладчика".
Кроме того, в DB2 for z/OS V8 отличается режим пошагового выполнения. Невозможно выполнить вход (step into) во вложенную хранимую процедуру. Можно отлаживать только одну хранимую процедуру. Поскольку вложенные хранимые процедуры не поддерживаются, операции step into, step over и step out работают по-разному. Step into и step out работают с блоками кода, а не с хранимыми процедурами. То есть step into будет выполнять вход в блок кода, например, тело цикла WHILE. Step over будет пропускать блок кода. Step out выполняет выход из текущего блока кода.
|
|
Настройки отладчика
Ниже рассмотрены некоторые настройки в окне Options, которые влияют на отладчик SQL-процедур.
Debug Session Timeout (таймаут сеанса отладки): при остановке сеанса отладки и не выполнении в течение указанного числа секунд каких-либо операций, сеанс отладки завершается и процедура выполняется до завершения своей работы. Применимо ко всем платформам z/OS Version 8 и Version 9. Maximum Variable Display Length (максимальная длина отображения переменной): значения переменной, которые длиннее данной настройки, усекаются. Применимо ко всем платформам version 8 и version 9. Debug Daemon Host (хост демона-отладчика): это имя хоста или IP-адрес локальной машины, на которой будет работать демон debug. Обычно эту настройку можно оставить в значении по умолчанию - localhost. Если на вашей машине имеется несколько IP-адресов, необходимо установить это значение в тот IP-адрес, доступный серверу базы данных, на котором выполняется хранимая процедура. Используется только для z/OS Version 8. Debug Daemon Port (порт демона-отладчика): номер порта TCP/IP, который будет использоваться демоном debug. Обычно может использоваться значение по умолчанию. При наличии другой службы, использующей этот же номер порта, измените его на свободное значение. Используется только для z/OS Version 8. Diagnostic Trace Level (уровень диагностической трассировки): объем диагностической трассировки, выполняемой на сервере. Обычно вы должны устанавливать это значение в 0, пока нет указаний службы поддержки DB2. Session Manager Connection (соединение менеджера сеансов): соединение, которое будет использоваться для работы менеджера сеансов. В большинстве случаев это поле нужно оставлять не заполненным, и менеджер сеансов будет работать с тем же самым соединением, с которым работает отлаживаемая хранимая процедура. Если вы хотите использовать для менеджера сеансов другое соединение, создайте сначала соединение в Server Explorer, а затем установите значение здесь. Применим ко всем платформам, но только version 9. Session Manager Port (порт менеджера сеансов): номер порта, используемого для менеджера сеансов. Если значение по умолчанию конфликтует с другой службой на сервере, на котором работает менеджер сеансов, измените значение на любое неиспользуемое.
Рисунок 17. Редактирование настроек отладчика
Резюме
IBM Database Add-Ins for Visual Studio 2005 предоставляет возможности отладки хранимых SQL-процедур, аналогичные функциональным возможностям отладки приложений, написанным на языках Visual Basic, Visual C# и Visual C++. В данной статье показано, как эти возможности отладки SQL-процедур облегчают поиск и исправление ошибок в хранимых SQL-процедурах.
Ресурсы Научиться
Получить продукты и технологии
- Загрузите пробную версию DB2 Enterprise 9.
- Теперь вы можете использовать DB2 бесплатно. Загрузите DB2 Express-C, бесплатную версию DB2 Express Edition для сообщества, предлагающую такие же базовые функции, как и DB2 Express Edition, и обеспечивающую прочный фундамент для создания и развертывания приложений.
Обсудить
Об авторе  | |  |
Эрик Джонсон (Eric M. Johnson) - разработчик в группе IBM Database Add-Ins for Visual Studio. |
Выскажите мнение об этой странице
|