Программирование >>  Программирование баз данных 

1 ... 132 133 134 [ 135 ] 136 137 138 ... 346


□ Run То Cursor. Эта опция действует в основном аналогично сочетанию точки прерывания и оператора Go. Если выбрана эта опция, начинается выполнение кода и продолжается до достижения того места программы, в котором определен текущий курсор. Исключения из этого правила могут наблюдаться, только если обнаруживается точка прерывания, предшествующая местонахождению курсора (в таком случае вьшолнение операторов прекращается не перед текущим курсором, а в точке прерывания), или достигается конец хранимой процедуры, прежде чем будет вызвана на вьшолнение строка с определением курсора (как и в таких обстоятельствах, когда определение курсора задано в строке, которая уже встречалась или входит в состав оператора управления процессом вьшолнения, который еще не был вызван на вьшолнение).

□ Restart. Эта опция осуществляет именно то действие, которое предусмотрено ее названием, - перезапуск. После щелчка на соответствующей пиктограмме восстанавливаются первоначальные значения параметров, инициализируются значения всех переменньгх и очищается стек вызовов, после чего вся работа возобновляется.

□ Stop Debugging. Эта опция также выполняет действие, предусмотренное ее названием, - немедленное прекращение вьшолнения. Но окно отладчика остается открытым.

□ Toggle Breakpoints и Remove All Breakpoints. Кроме всего прочего, задавать точки прерывания можно, щелкнув на левом поле окна с отлаживаемым кодом. Точками прерывания называются такие места программы, где СУБД SQL Server получает команду остановиться при выполнении кода в режиме отладки. Точки прерывания удобно применять при отладке хранимых процедур или функций с большим объемом кода, когда нет необходимости отдельно рассматривать каждую строку и достаточно просто выполнять прогон кода до указанной точки, останавливаясь каждый раз, когда программа дойдет до определенного места.

Кроме того, в программе Debugger имеется несколько окон, которые в дальнейшем изложении будут именоваться окнами контроля состояния; ниже описаны наиболее важные из этих окон.

Окно Locals

Как уже было сказано в начале данной книги, автор во многом рассчитывает на то, что читатель имеет опыт работы с каким-то процедурным языком программирования. Поэтому окно Locals, по-видимому, не будет для вас полностью незнакомым. Кратко объяснить назначение этого окна можно так, что в нем отображаются текущие значения всех переменных, которые в настоящее время находятся в области определения. В ходе пошагового вьшолнения программы, когда осуществляется вызов вложенных хранимых процедур и возврат управления из этих процедур, перечень переменных в окне Locals может изменяться (наряду с их значениями). Но следует помнить, что отображаются только те переменные, которые заданы в области определения к тому времени, как будет вызван на вьшолнение следующий оператор.

Для описания каждой переменной или каждого параметра предусмотрены следующие три фрагмента информации:



имя;

текущее значение;

тип данных.

Безусловно, окно Locals является очень удобным, но наилучшим его свойством оказывается то, что оно позволяет редактировать значения любой переменной. Благодаря этому существенно упрощается задача внесения изменений непосредственно в ходе выполнения для проверки того, как осуществляются в хранимой процедуре те или иные действия.

Окно Watch

Окно Watch программы Debugger является менее удобным по сравнению с аналогичными окнами современных отладчиков, но позволяет задавать имена переменных, значения которых должны отслеживаться, и контролировать изменения значений.

Окно Call Stack

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

Окно Output

Окно Output применяется для вывода результатов, сформированных в СУБД SQL Server. К ним относятся не только результирующие наборы, но и возвращаемое значение, полученные после завершения выполнения хранимых процедур.

Действия, выполняемые в программе Debugger сразу после ее запуска

На этом предварительное описание работы программы Debugger закончено, поэтому сразу после того, как откроется окно данной программы, мы можем приступить к анализу кода.

Первой исполняемой строкой в рассматриваемой хранимой процедуре является оператор IF, поэтому данная строка после зап)ска программы Debugger становится текущей. Можно видеть, что значения еще не присвоены ни одной переменной, кроме ©Valuein, которой присвоено значение параметра вызова хранимой процедуры. Таковым является значение 3, которое было передано в хранимую процедуру после заполнения соответствующего элемента в диалоговом окне Debug Procedure на предшествующем этапе.

Перейдите на следующую строку, нажав клавишу <F11>, щелкнув на пиктограмме Step Into или выбрав соответствующую команду меню.

Значение ©Valuein не равно 1, поэтому происходит переход в блок BEGIN. . .END, определенный оператором IF. А именно, управление передается оператору SELECT, с помощью которого инициализируется параметр ©InWorking. Как будет показано ниже, если бы в действительности значение ©Valuein было равно единице, то немедленно произошел бы переход к конструкции ELSE оператора IF.



Перейдите еще на одну cTpoicy (нажав клавишу <F11>, щелкнув на пиктограмме Step Into или выбрав команду меню), как показано на рис. 11.6.

EcSt View

Project

Debug Data

Tools

Community Help

X- й J

dlio.spTriangu...ventureWofks)

ALTER PROC spTirianguieu: gvaluein int, eVftlueOut int OUTPIJT AS

DECLARE einUorking int DECLARE 0OutUoi:)ciiitj int IF OValxieIn != 1 BEGIH

ELSE BECriJ

[select OlntJorking = Ё Value In - ij

EXEC ярТг iangiAier G InTJorking, eOutUorking OUTPUT [select evalwiOut - G Value In + eOut¥orhltig(

[select QValueOut

Solutior Explorer

@>ValueOut

©Outworking

gilnWorking 2

Shew output from: Debug


Auto-att&ch to process [1в41 [SQL] chaiucK om Mchiaa c: A The thread chaucsr tSZ] (OxZdO) has exited with coda О < Th thread chaucec (CKdO) has e:rited with code 0 t.

The thread chaucer (OxZdO) has esited t*iU code a (

The thread chaueer (£2] (Ск2Л0) has SKited vith cods О ( Runnlrig [ dbo J . [spTriangular! ( @ValueIii = 3, 3ValueOut = <

a AJtos Locak Watdi 1

CdH Stdck KEreakpomts: Oulpjt

Ready

Pwc. 11.6. Построчное выполнение команд хранимой процедуры

Теперь особое внимание следует обратить на то, чему стало равно значение ©InWorking в окне Locals. Следует отметить, что переменная ©InWorking приняла правильное значение (значение ©Valuein в настоящее время равно 3, поэтому разность 3-1 равна 2), установленное с помощью оператора SELECT. Также не менее важно то, что в окне Call Stack показан лишь текущий экземпляр хранимой процедуры. Наличие только одного экземпляра наблюдается в связи с тем, что пошаговый переход во вложенную версию хранимой процедуры еще не произошел.

Продолжим работу и выполним пошаговый переход к следующему оператору. В этом операторе вызывается на выполнение хранимая процедура, поэтому в окне Debugger обнаруживаются различные изменения (рис. 11.7).

Важно отметить, что теперь создается впечатление, будто стрелка, которая указывает на текущий оператор, снова была переведена на оператор IF. Рассмотрим, с чем это связано. Это связано с тем, что в окне теперь показан новый экземпляр хранимой процедуры. Об этом можно судить по данным, представленным в окне Call Stack. Обратите внимание на то, что в нем теперь поьсазаны два экземпляра хранимой проце-



1 ... 132 133 134 [ 135 ] 136 137 138 ... 346

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика