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

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


dbo.spTrfangulef: Stored Procedur

ks) (Debueging)

Ble dit Vievy 2го]еЛ Debug Ctata Tools Window CommLjnity htelp

dbo. pTriangiJL..V4

ALTER PROC spTriangular

SVaiueln int,

eValueOut int OUTPUT

DECLARE GInWorking int DECLARE GOutWorking int IE GVaiuelii != 1 BEGirJ

ELECT GInWorking = ВValueIn

EXEC spTriangular BlnUcrking, SOutUorking OUTPUT [select evIiieOut - e Value In + eoutWorkingj

EUD ELSE BECin

EIID RETURM

[SELECT GValueOut

Na ivdue jtype ёЛ/а1ие!п Z i4

V ValueOut rt

V ©OutWwkJng ill:

j kame Largi

dbo,spTriangular(chaLKer.AdventureWDrks)(inl: @Valuein=:3, int @Vs1ijeOut T-SQl

g atttosljbgIPPch 1 jC stack 3bre<ptrints cwtpi*

Ready

Pitc. 11.7. Отображение последствий вызова на выполнение хранимой процедуры в окне Debugger

дуры. В верхней части этого окна синим цветом обозначен текущий экземпляр. Заслуживает также внимания то, что параметр ©Valuein имеет значение 2 - значение, переданное из внешнего экземпляра хранимой процедуры.

Чтобы ознакомиться со значениями переменных в области определения внешнего экземпляра хранимой процедуры, достаточно дважды щелкнуть на строке с обозначением этого экземпляра в окне Call Stack (на строке, отмеченной зеленой стрелкой), после чего обнаружится, что содержимое всех окон снова изменилось (рис. 11.8).

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

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



dbo.spTrfangulef: Stored Procedu

Sle Еф: iisvi ШеЛ Debug [>а1:э tools Window Community tjep

dbo.spTriangu...¥entureWorks> j

iLTER PROC spTriangular evaluein int, eValueOut- int OUTPUT AS

DECLAIMS GinMorklna int DECLARE GOutWouJclnf Int rr GValueIn != 1

[select GlnUQcking = EValueIn - l]

EXEC spTriangular BlnUcrking, @Outworking OUTPUT ELECT eValueOu): = evaluein + gOutWorkin

ZiJJ> ELSE BEGIH

A I > -

RETURN

[select в ValueOut

@VulueIn @VelueOut

V ©Outworking

V ©InWorking 2

G5tack X

Ndfne Largi

dbo7q>Triargular(chaLicer. AdventureWtorksXint @Va)LieIn=2/int ©VsueOut T-5QI dbo,spTri igular(chajcer,AdventureWDrksXinl: ii)ValueIn-3, irt diVdueOut T-SQI

ALfto? iLocab ! Watch 1

Ready

ICall Stack iBreointslOutpiJt

Puc. 11.8. Переход к другому экземпляру хранимой процедуры в окне Call Stack

личилась до трех уровней, а значения переменных и параметров в окне Locals снова изменились. Наконец, отметим, что на этот раз параметр ©Valuein имеет значение 1.

После нескольких пошаговых переходов в этом коде снова обнаружится небольшое изменение в поведении сценария, после достижения переменной ©Valuein значения 1. На этот раз значение переменной ©Valuein действительно равно 1, поэтому происходит переход в блок BEGIN. . . END, который задан в конструкции ELSE (рис. 11.9).

Итак, достигнут конец стека вызовов, поэтому наступило такое время, когда нужно возвращаться назад. После выполнения еще двух шагов происходит возврат ко второму уровню в стеке, как показано на рис. 11.10.



dbo.spTrfangulaf: Stored F

irks) (Debugging) - Microsoft Visut Studio

Ole Edft iiew Brojert Debug Da loob Windoiw Community tjefp

.-] jJ J it... к

-i }..

dbo.spTriangu...¥entureWorks)

ALTER PROC spTriangular evaluein int eVaiueOut int OUTPUT AZ

DECLAilE DInWorking itit DECLARE DOutlJorking int rr GVaiueIn !- 1 BEGIU

gi4 J..

v X Solution Explorer

ELSE

BEGIH

RETURM

[select BlnUorking = В Value In - ij

exec spTriangular einUorking, eOut¥nrking OUTPUT [select e ValueOut = 6 Value In + @ Outworking

[select в ValueOut

ел/а1ие!п 0 @ValueOiA g @OutWofkJng V (5HnWorHng

IVdue

[Gall Stack rjams

L Tgi

, dbo,spTniangular(chaLJcer.AdventureWtorksXint @ValtjeIrn=l, int @ValueOut T-SQI dbo,spTriangularCchaucer.AdventureWtorl(sXint @ValiieIfv-2, int @VdueOut T-SQI dbo.spTri igular(chaLicer,AdventureWorJ<s)(int @ValueIn-3, int @VdLieOut T-5QI

ЩА1Щ1аса1? [ Watch 1

jC Stack j3&etnts Ц pwJt

1 Ready

1Л le cd 1

Pwc. 11.9. Результаты перехода в блок BEGIN. . . END

Обратите внимание на то, что стек вызовов снова состоит только из двух уровней. Кроме того, следует отметить, что выходному параметру (©Outworking) присвоено правильное значение.

Теперь достаточно выполнить команду Step Out (<Shift+Fll>), и теьсущий этап отладки будет завершен.

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



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

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