ASP 페이지의 스크립트 개체 디버깅
업데이트: 2007년 11월
ASP 페이지에서 스크립트 개체를 디버깅하려면 다음을 고려해야 합니다.
스크립팅 개체 모델 정의
디버깅 및 스크립트 라이브러리
스크립트 개체 디버깅 사용
오류 보고
이벤트 추적
경고 추적
스크립팅 개체 모델 정의
ASP 스크립팅 개체 모델은 웹 응용 프로그램 내에서 사용할 수 있는 이벤트, 속성 및 메서드를 가진 개체 집합을 정의합니다. 대부분의 스크립트 개체는 Microsoft Visual Basic의 컨트롤과 유사한 방식으로 사용자 인터페이스, 단추, 텍스트 상자 등의 요소 및 함수를 나타냅니다.
Microsoft Visual Studio 2005의 스크립트 개체는 특별한 런타임이 필요하지 않으며, 개체를 사용할 때 ASP 페이지에 포함되는 스크립트 파일에 정의됩니다. 이러한 파일은 단순한 스크립트이지만 ADO(ActiveX Data Object) 명령과 HTML 요소를 캡슐화하여 이벤트 구동 방식의 프로그래밍을 지원하는 복잡한 개체를 만들 수 있습니다.
각 스크립트 개체에는 서버에서 일반 HTML 3.2 브라우저용 ASP로 실행되는 버전과 클라이언트에서 Internet Explorer 4.0 이상으로 실행되는 버전이 있습니다. 두 버전 모두 프로그래밍 모델(이벤트, 메서드 및 속성)은 동일합니다. 코드에서 스크립트 개체를 직접 만들거나 디자인 타임 컨트롤을 통해 스크립트 개체를 만들어 사용할 수 있습니다. ASP 페이지를 저장하면 해당 스크립트 개체 코드는 표준 HTML과 스크립트의 조합으로 유지됩니다.
디버깅 및 스크립트 라이브러리
스크립트 개체는 스크립트 내에 작성되므로 스크립팅 개체 모델과 상호 작용하는 사용자 스크립트를 디버깅하는 작업은 다음과 같은 이유로 복잡해질 수 있습니다.
첫째, 디버거를 사용하여 사용자 스크립트를 단계별로 실행하면 익숙하지 않은 복잡한 스크립트 라이브러리 코드를 한 단계씩 실행하게 됩니다.
둘째, 스크립트 라이브러리 내부에서 오류가 발생한 경우 단계별로 실행하면 시간이 많이 걸리며 오류를 찾는 데 도움이 되지 않을 수 있습니다.
마지막으로 스크립트와 스크립팅 개체 모델 간의 제어 흐름과 이벤트 시퀀스를 따르는 작업이 어려워질 수 있습니다.
이제 이러한 상황에서 다음과 같은 스크립팅 개체 모델 디버깅 옵션을 사용하여 해당 응용 프로그램을 디버깅할 수 있습니다.
하위 수준 오류 catch — 레코드 집합 등과 같은 스크립트 개체에 오류가 발생하면 자세한 오류 메시지를 표시할 수 있습니다. 이 옵션을 사용하면 외부 이유로 실패할 수 있는 구성 요소의 오류를 찾는 데 도움이 됩니다.
이벤트 추적 — 발생하는 이벤트의 목록을 페이지에 표시할 수 있습니다. 이 옵션을 사용하면 스크립팅 개체 모델 이벤트와 관련하여 스크립트가 실행되는 시기를 확인하는 데 도움이 됩니다.
경고 추적 — 아무런 예고 없이 나타나는 오류 경고 메시지를 볼 수 있습니다. 이 옵션은 메서드에 잘못된 매개 변수를 전달하여 발생하는 문제를 찾는 데 도움이 됩니다.
스크립트 개체 디버깅 사용
ASP 페이지에는 보통 맨 위에 디버깅 옵션이 있는 스크립트 블록이 포함되어 있습니다. 기본적으로 이 옵션은 해제되어 있습니다. 다음은 스크립트 블록의 예입니다.
<SCRIPT id=DebugDirectives runat=server language=javascript>
// Set these to true to enable debugging or tracing
@set @debug=false
@set @trace=false
</SCRIPT>
스크립트 개체를 디버깅하려면 서버에 JScript 5.0 이상이 실행되고 있어야 합니다. JScript 5.0은 Microsoft 웹 사이트에서 서버로 다운로드할 수 있습니다.
디버깅을 사용하려면 원하는 디버깅 옵션을 true로 설정합니다. 예를 들어, 하위 수준의 오류를 catch하려면 블록을 다음과 같이 변경합니다.
<SCRIPT id=DebugDirectives runat=server language=javascript>
// Set these to true to enable debugging or tracing
@set @debug = true
@set @trace = false
</SCRIPT>
디버깅 옵션 블록은 ASP 페이지의 맨 위에 있는 @language 지시문 바로 다음에 와야 합니다.
다음 목록에서 설명하는 네 가지 옵션을 모두 설정할 수 있습니다.
이름 |
용도 |
---|---|
@debug |
특정 스크립트 개체에서 선택한 오류를 보고합니다. |
@trace |
다음 추적 옵션을 모두 설정합니다. |
@trace_events |
이벤트 추적을 설정합니다. |
@trace_warnings |
보통 예고 없이 발생하는 오류에 대한 경고를 설정합니다. |
개별 항목을 설정하는 방법에 대한 자세한 내용은 이 항목의 다음 절에서 설명합니다.
참고: |
---|
@trace를 true로 설정하면 이 설정은 @trace_events 및 @trace_warnings 설정보다 우선합니다. 그러나 @trace가 false이면 각 추적 옵션을 개별적으로 설정하고 해제할 수 있습니다. |
개별 추적 옵션은 ASP 페이지의 기본 스크립트 블록의 일부가 아니므로 개별적으로 설정하려면 해당 옵션을 추가해야 합니다. 예를 들어, 다음 스크립트는 경고 메시지를 표시하지 않고 이벤트를 추적하기만 합니다.
<SCRIPT id=DebugDirectives runat=server language=javascript>
@set @debug = false
@set @trace = false
@set @trace\_events = true
</SCRIPT>
Microsoft Internet Explorer 4.x에서 @trace 옵션을 설정하면 이 설정이 BODY 태그에 우선하므로 BODY 태그 내에서 이벤트 바인딩을 사용하지 못할 수 있으며 특성이 무시됩니다. Internet Explorer 5.0 이상을 사용하면 이러한 문제가 발생하지 않습니다.
Internet Explorer 4.0에서는 다음과 같은 스타일의 이벤트 바인딩이 동작하지 않습니다.
<BODY onload="initialize()">
이러한 문제를 해결하려면 다른 바인딩 메커니즘을 사용해야 합니다. Visual Basic 스크립팅 버전(VBScript)을 사용하는 경우 암시적 바인딩을 사용할 수 있습니다.
<SCRIPT LANGUAGE="VBScript">
Function window_onload()
initialize()
End Function
</SCRIPT>
JScript를 사용하는 경우 다음과 같이 창 개체 이벤트에 함수 포인터를 할당하는 전역 스크립트를 호출할 수 있습니다.
<SCRIPT LANGUAGE="JScript">
window.onload = initialize
</SCRIPT>
BODY 태그에 특성이 포함되어 있는 경우 문서 개체의 속성을 설정하여 스크립트에서 해당 특성을 설정해야 합니다. 예를 들어, BODY 태그에 BGCOLOR="#FFFF00" 특성이 포함되어 있는 경우 다음과 같은 스크립트를 사용하여 이 특성을 설정할 수 있습니다. 문서가 처음 로드될 때 이 스크립트를 호출하려면 위에 설명한 방법을 사용합니다.
<SCRIPT LANGUAGE="JScript">
function initialize(){
document.bgColor = "#FFFF00";
}
</SCRIPT>
오류 보고
일부 스크립트 개체는 페이지 외부의 다른 개체와 상호 작용합니다. 예를 들어, 레코드 집합 개체는 ADO를 사용하여 데이터베이스에 액세스합니다. 이러한 상호 작용 중에 오류가 발생하면 외부 개체에서 보고하는 오류 정보가 모호하거나 페이지의 컨텍스트에서 불완전하게 보일 수 있습니다.
@debug 옵션은 이러한 종류의 공통 오류 집합을 catch하고 해석하는 보고 메커니즘을 사용합니다. 오류 정보는 ASP 페이지에 기록되고 페이지의 일반 내용과 함께 표시됩니다. 경우에 따라서는 내부 오류 메시지도 나타납니다.
예를 들어, @debug가 true로 설정된 상태에서 레코드 집합 개체가 잘못된 SQL 문을 실행하려고 하면 페이지에 다음과 유사한 스크립트가 표시될 수 있습니다.
SCRIPTING OBJECT MODEL EXCEPTION:
FILE: recordset.asp
FUNCTION: Recordset1.open()
DESCRIPTION: Failed to open the ADO recordset. Check for the following
possible causes:
An invalid SQL statement.
Missing or invalid database object name (check Recordset DTC properties)
Missing parameters or parameter type mismatch (parameters must be set
before recordset is opened).
이벤트 추적
ASP 페이지가 스크립팅 개체 모델을 사용하면 개별 스크립트 개체는 상태 변경(예: Recordset1_ondatasetcomplete)에 대한 응답으로 또는 사용자 동작(예: Button1_onclick)에 대한 응답으로 이벤트를 시작합니다. 경우에 따라 스크립팅 개체 모델에 의해 시작되는 이벤트에 따라 사용자 스크립트가 실행되는 시기를 알고 있어야 합니다.
이렇게 하려면 @trace 옵션이나 @trace\_events 옵션을 true로 설정하여 이벤트 추적을 설정합니다. 이벤트 추적을 사용하면 이벤트가 발생할 때 이벤트 정보가 ASP 페이지에 기록됩니다. 예를 들어, ASP 페이지에 다음과 같은 내용이 기록됩니다.
EVENT TRACE: thisPage fired oninit event.
EVENT TRACE: Recordset1 fired onbeforeopen event.
EVENT TRACE: Recordset1 fired onrowenter event.
EVENT TRACE: Recordset1 fired ondatasetchanged event.
EVENT TRACE: Recordset1 fired ondatasetcomplete event.
사용자 스크립트가 실행되는 시기를 결정하려면 다음 스크립트에서 설명하는 것처럼 Response.Write 문을 중요한 지점에 포함시킵니다. 다음 예제에서는 텍스트 상자의 정보에 따라 레코드 집합의 매개 변수를 설정하며, 각 단계마다 페이지에 Response.Write 문을 표시합니다.
Sub btnQuery_onclick()
Recordset1.close()
Response.Write("Finished closing recordset.")
Recordset1.setParameter 1, txtLastName.value
Response.Write("Finished resetting query parameter.")
Recordset1.open()
Response.Write("Finished reopening recordset.")
End Sub
JScript 조건부 컴파일 명령을 사용하면 디버깅 옵션을 설정한 경우에만 Response.Write 문이 페이지에 나타나도록 지정할 수 있습니다. 예를 들어, 다음 블록에서는 @trace 옵션이 true로 설정된 경우에만 Response.Write 문이 실행됩니다.
@if (@trace)
Response.Write("Ready to set SQL statement parameters.");
@end
디버깅 옵션을 사용하는 것 이외에 다음 예제와 같이 조건 플래그를 직접 만들 수도 있습니다.
@set @trace\_custom = true
' ... other script here
@if (@trace_custom)
Response.Write("Ready to set SQL statement parameters.");
@end
참고: |
---|
페이지를 배포하기 전에 디버깅 조건을 false로 설정했는지 확인하십시오. |
조건부 컴파일에 대한 자세한 내용은 Microsoft Scripting 웹 사이트의 Statements 섹션에서 @if 및 @set 명령을 참조하십시오.
경고 추적
사소한 오류에 대해서는 스크립트 개체가 보고하지 않도록 하면 보다 강력한 스크립트 개체를 만들 수 있으며, 원하지 않는 정보를 ASP 페이지에 표시하지 않을 수 있습니다. 예를 들어, 스크립트 개체의 메서드에 잘못된 값을 전달했지만 이 값으로 인해 개체가 완전히 실패하지 않는 경우 오류 메시지 없이 개체를 계속 실행할 수 있습니다. 그러나 응용 프로그램을 개발하는 동안 스크립트 개체에 문제가 있는지 여부를 확인을 해야 할 경우가 있습니다. 경우에 따라 보고되지 않은 문제로 인해 나중에 페이지를 실행하는 동안 다른 문제가 발생하여 페이지를 디버깅하는 것이 더 어려워질 수 있습니다.
이러한 문제는 @trace 옵션이나 @trace\_warnings 옵션을 true로 설정하여 경고를 추적하면 해결할 수 있습니다. 스크립트 개체에 문제가 발생하면 해당 스크립트 개체는 다음과 같은 형식으로 페이지에 정보를 기록합니다.
WARNING TRACE:
FILE: recordset.asp
FUNCTION: Recordset1.open()
DESCRIPTION: Recordset is already open.
참고 항목
작업
방법: Internet Explorer에서 스크립트 디버깅 사용