|
Программирование >> Программирование баз данных
□ 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. Обратите внимание на то, что в нем теперь поьсазаны два экземпляра хранимой проце-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |