스크립트 디버깅

 

Altium Designer 스크립팅 시스템은 모든 기능을 갖춘 디버깅 환경을 제공합니다. 스크립팅 디버거는 다양한 자동화 도구와 정보 패널을 제공하여 스크립트의 오류를 식별하고 해결하는 데 도움을 줍니다.

스크립트 오류

일반적인 오류로는 잘못된 메서드, 잘못 배치된 그룹화 연산자, 타입 불일치, 논리 오류, 오타 등이 있습니다. 스크립팅 시스템에서 오류가 발생하면 디버거가 스크립트를 일시 정지하고 문제를 나타내는 오류 대화상자를 표시합니다.

아래 예시는 종료 문자가 누락된 스크립트와 이에 해당하는 오류 대화상자 메시지를 보여줍니다.

 디버거는 컴파일 오류 또는 런타임 오류에 반응하여 스크립트를 일시 정지합니다.

오류 대화상자를 닫은 후에는 코드를 수정하고 스크립트를 다시 실행할 수 있습니다. 스크립트를 중지해야 하는 경우(예: 단계별 실행 중)에는 Stop 명령(Run » Stop, Ctrl+F3) 또는 버튼( Script Debug 툴바에 있음)을 사용하십시오.

오류로 인해 스크립트가 무한 루프에 갇혀 응답하지 않게 되는 경우가 있습니다. 이 문제를 해결하려면 Ctrl+Pause/Break 단축키를 눌러 스크립트의 루프를 중단하십시오.

스크립트 디버깅

스크립팅 시스템에는 스크립트 디버깅을 돕는 다양한 도구가 있습니다. 여기에는 스크립트에 여러 개의 브레이크포인트를 적용하는 기능, Watch List 패널을 사용해 변수 값을 모니터링하는 기능, 북마크를 사용해 더 효율적으로 이동하는 기능, 그리고 step into/step over 기능을 사용해 스크립트를 추적하는 기능이 포함됩니다.

예를 들어, 스크립트에서 변수와 식의 값을 확인할 때 다음 기능을 사용할 수 있습니다.

► 스크립트 디버깅 시 편집기 도구 사용 방법은 Script Editor Tools를 참조하십시오.

열려 있는 문서에 대해 동작하는 스크립트를 디버깅하는 경우(예: IPCB_Board 인터페이스를 사용해 PCB 문서에서 데이터를 가져오는 경우) 스크립트 편집기는 이를 활성 문서로 감지하지 못할 수 있습니다. 이 경우 변경 사항을 저장한 다음, 활성 문서 자체에서 스크립트를 실행하십시오(File » Run Script).

추적(Tracing)

스크립트에서 알 수 없는 오류를 찾고 해결하는 데 도움이 되도록, 여러 지점에서 코드를 일시 정지시키기 위해 스크립트에 일련의 브레이크포인트를 삽입하고 변수 및 식의 값을 확인할 수 있습니다.

하지만 스크립트가 일시 정지된 어떤 시점에서든, 디버거의 추적/스텝 기능을 사용해 스크립트를 기능 라인 단위로 한 줄씩 진행할 수도 있습니다. 즉, 관심 영역에서 브레이크포인트로 먼저 스크립트를 멈춘 뒤 추적 기능으로 한 줄씩 진행할 수 있습니다. 스크립트를 한 줄씩 실행하는 이 과정을 tracing 또는 script stepping이라고 합니다.

스크립트 디버거는 추적과 관련된 명령(stepping into(Run » Step Into) 및 stepping over(Run » Step Over))을 제공합니다. 이를 통해 스크립트 프로세스를 추적하고 스크립트 코드를 디버깅할 때 동작을 분석할 수 있습니다.

Run menu에서 사용할 수 있는 디버깅 명령.
Run menu에서 사용할 수 있는 디버깅 명령.

Step Into 명령

Step Into 프로세스는 스크립트를 한 번에 하나의 문장(statement)씩 실행합니다. 이 명령은 Run menu, 해당 Script Debug 툴바 버튼(), 또는 F7 단축키에서 사용할 수 있습니다.

실행 중인 문장이 다른 프로시저를 호출하는 경우, step into는 제어를 호출된 프로시저의 첫 번째 줄로 이동시킵니다. 편집기에서 연두색(pea-green) 하이라이트는 스크립트가 현재 실행 중인 코드 라인을 나타냅니다. 스크립트 단계 실행은 Run » Stop 명령, Ctrl+F3 단축키, 또는 툴바 버튼()으로 취소할 수 있습니다.

Step Over 명령

Step Over 프로세스는 Step Into와 유사하지만, 현재 문장이 다른 프로시저 호출인 경우 호출된 프로시저 내부로 들어가 추적하지 않고, 멈추지 않은 채 호출된 프로시저 전체를 실행한다는 점이 다릅니다. 이 명령은 Run menu, 해당 버튼(), 또는 F8 단축키에서 사용할 수 있습니다.

이 명령은 현재 프로시저에서 문제가 called 프로시저에 의해 발생한 것이 아님이 확인되었을 때 유용하며, 호출된 프로시저를 불필요하게 한 줄씩 추적할 필요를 없애줍니다. 즉, 해당 프로시저는 ‘step over’됩니다.

메인 메뉴에서 Run » Run To Cursor 명령(단축키: Ctrl+F9) 을 사용하면 커서 위치까지 스크립트를 실행할 수 있습니다. 스크립트는 해당 라인에서 브레이크포인트를 만난 것처럼 일시 정지하며, 그 지점부터 실행하거나 단계 실행할 수 있습니다.

Call Stack 패널

 Call Stack 패널은 디버깅 중인 스크립트에서 현재 실행 지점에 도달하기까지 거쳐 온 프로시저 및 함수의 호출 체인을 확인하는 데 사용됩니다.

 Call Stack 패널
 Call Stack 패널

스크립트를 단계별로 디버깅하면, 패널에 진입한 함수 또는 프로시저의 이름이 표시됩니다.

다른 함수/프로시저 호출을 만나면, 해당 추가 함수/프로시저에 진입하는 시점에 그 이름이 패널에 표시됩니다. 함수/프로시저 내부에서 또 다른 함수/프로시저가 호출되더라도, 원래의 함수/프로시저는 계속 패널에 표시됩니다.

이렇게 ‘콜 스택(call stack)’이 구성되어, 하위(자식) 함수/프로시저 호출 간의 관계가 표시됩니다. 원래의 함수/프로시저는 스택의 맨 아래에 나타나며, 이후 호출되는 각 함수/프로시저가 그 위에 쌓여 현재 진입한 함수/프로시저가 스택의 맨 위에 위치합니다.

스크립트 실행이 하위 함수/프로시저에서 빠져나와 호출한 함수/프로시저로 돌아가면, 전자는 스택에서 제거되고 호출한 함수/프로시저가 스택의 맨 위가 됩니다.

패널의 항목을 더블클릭하면 선택한 함수 또는 프로시저 호출이 이루어지는 해당 스크립트 라인으로 이동합니다. 그 라인은 스크립팅 오류에 연관된 색상으로 하이라이트되며, 오른쪽 여백에 스크립팅 오류 마커가 표시됩니다. 이는 순수하게 강조 표시를 위한 것이며, 문서를 클릭하면 사라지고 디버그 세션을 어떤 방식으로도 방해하지 않습니다.

예외 및 메시지

대부분의 프로그래밍 프로젝트가 그렇듯, 스크립트 코드의 개발과 디버깅은 ‘동작하는’ 스크립트에서 끝나지 않습니다. 실제 사용 중에는 스크립트가 예상치 못한 오류를 만나거나 기대한 결과를 제공하지 못할 수 있습니다.

다행히도 스크립팅 시스템을 사용하면 실행 예외를 처리하고 스크립트 동작에 대한 사용자 피드백을 제공하는 여러 방법이 있습니다.

예외 처리기

DelphiScript에서 try 키워드는 try-except 문 또는 try-finally 문을 도입합니다. 이 두 문은 서로 관련이 있지만 목적은 다릅니다.

Try Finally

Try-Finally 처리기에서는 finally 블록의 문장이 항상 실행됩니다. 즉, try 블록에서 예외 오류가 발생했는지 여부와 관계없이 실행됩니다. try-finally 블록은 임시 객체나 기타 리소스를 해제하고 정리 작업을 수행하는 데 사용하십시오.

Reset(F);
Try
  // process file F
Finally
  CloseFile(F);
End;

Try Except

Try-Except 문은 발생(raise)한 예외를 포착하고 관련 오류 처리 코드를 실행하는 데 사용합니다. 예를 들어 특정 예외를 포착해 로그를 업데이트하거나 설명적인 오류 대화상자를 열 수 있습니다. try 블록에서 코드 예외가 발생하면 except 블록이 실행됩니다.

아래 예제에서는 ApplyOffset 프로시저가 적절한 파라미터와 함께 DefineOffset 프로시저에서 호출됩니다. 이 프로시저는 (Ydim Zdim 변수에 대해) 간단한 나눗셈 계산을 수행하고, 그 결과(Offset)를 표준 대화상자에 표시합니다.

Procedure ApplyOffset(Ydim, Zdim);
Var
   Offset;
Begin;
   Try
      Offset := Ydim div Zdim;
      ShowInfo('Calculated Offset = ' + IntToStr(Offset));
   Except
      ShowWarning('Entered Z dimension must be greater than zero.');
   End;
End;

Procedure DefineOffset;
Begin;
   ApplyOffset(32, 4);
End;

위에 표시된 ApplyOffset 파라미터(32,4)의 경우, 실행된 스크립트는 아래와 같이 ShowMessage 프로시저를 사용해 계산 결과를 표시합니다.

반대로 전달되는 파라미터를 32,0(ApplyOffset(32, 0);)로 변경하면 Offset 계산에서 0으로 나누기 예외가 유발되어 Except 처리기 블록이 트리거됩니다. 이 블록은 ShowWarning 프로시저를 사용해 관련 Warning 대화상자를 표시합니다.

스크립트 편집기의 디버그 모드에서는 Error 대화상자를 닫을 때 예외로 인해 스크립트 실행이 일시 정지됩니다. 계속하려면 Run 또는 Step Into 명령을 사용하십시오.

Raise

위의 간단한 오류 처리 프로시저는 예외가 0으로 나누기 오류에 의해 발생한다는 가정에 기반하지만, 이는 다른 유형의 예외가 경고 대화상자 텍스트에 정확히 보고되지 않는다는 뜻입니다. 다만 이 예제에서는 실제로 가장 발생 가능성이 높은 예외 오류입니다.

그럼에도 사용자 관점에서는 어떤 형태로든 구체적인 오류 감지가 바람직합니다. DelphiScript에서는 Delphi의 On 키워드(지정된 예외 타입을 포착하기 위한)는 지원되지 않지만, Raise 문을 Except 블록 내부에서 사용하여 가장 최근의 예외(어떤 타입이든)를 다시 발생시킬 수 있습니다.

Try
   Offset := Ydim div Zdim;
   ShowInfo('Calculated Offset = ' + IntToStr(Offset));
Except
   Raise;
End;

이렇게 하면 프로시저 코드의 대부분이 try-except 문의 try 블록 안에 있을 때, 모든 예외를 Raise 문으로 보고할 수 있습니다. 단, 예외 대화상자는 스크립트에 특화된 정보가 아니라 일반적인 오류 메시지만 보고합니다.

   

Raise 는 파라미터 없이 사용하면 마지막 예외를 다시 발생시키고, 문자열 파라미터와 함께 사용하면 특정 오류 메시지를 전달할 수 있습니다.

Raise 또한 간단한 if-then 또는 case 문을 적용하는 등 특정 테스트에 대한 반응으로 예외를 유발하는 데에도 사용할 수 있습니다.

Procedure ApplyOffset(Ydim, Zdim);
Var
   Offset;
Begin;
   if Zdim > Ydim then
      Begin;
         Raise('Z dimension must be smaller than Y dimension.');
      End;
   Offset := Ydim div Zdim;
   ShowInfo('Calculated Offset = ' + IntToStr(Offset));
End;

여기서는 위 예제의 Zdim 파라미터가 Ydim 파라미터보다 크면 메시지를 포함한 예외가 발생합니다.

VB 스크립트의 오류

Altium Designer 스크립팅 엔진의 VBScript 구현에는 VBScript 스크립트 프로젝트에서 사용할 수 있는 내장 함수가 포함되어 있으며, 예를 들어 MsgBox 함수가 있습니다.

On Error 문은 VB Script에서 오류를 트래핑(포착)할 때 사용할 수 있습니다. 오류 트래핑에 대한 자세한 내용은 Microsoft VBScript documentation을(를) 참조하십시오.

메시지

일반적으로 메시지는 사용자 관점에서 스크립트 동작을 향상시키는 주요 수단입니다.

메시지는 예외 상황에 대한 경고를 제공하거나 실행 중 정보 및 경고를 표시할 수 있으며, 입력 데이터, 계산, 파일 작업 또는 절차적 흐름을 파악하는 데 도움이 되는 모든 프로시저를 다루는 스크립트 루틴에 삽입할 수 있습니다.

메시지 대화상자

스크립팅 시스템에서 제공되는 기본 메시지 대화상자(ShowMessage)와 함께, 사용자에게 맞춤형 피드백을 제공하기 위한 다양한 전용 대화상자를 사용할 수 있습니다.

여기에는 다음과 같은 메시지 프로시저가 포함됩니다:

  • ShowError
  • ShowException
  • ShowInfo
  • ShowWarning
  • 등..

메시지 패널

Altium Designer의 Messages 패널은 스크립팅을 위한 유용한 디버깅 도구가 될 수 있으며, 사용자에게 유용한 메시지 정보를 지속적으로 제공하는 용도로도 적용할 수 있습니다.

Messages 패널은 Message Manager 인터페이스에서 접근하는 Workspace Manager 객체입니다. Messages 패널은 아래 예시에서 설명한 것처럼, 디버깅과 사용자 피드백을 위해 변수와 속성의 상태(또는 그 밖의 어떤 데이터든)를 스크립트에서 표시하는 데 사용할 수 있습니다.

Procedure CreateMessages;
var
   WS : IWorkSpace;
   MM : IMessagesManager;
Begin
   WS := GetWorkSpace;           // obtain Workspace Manager interface
   MM := WS.DM_MessagesManager;  // obtain Message Manager interface
   
   MM.ClearMessages;             // initialize

   MM.BeginUpdate;
   // add relevant messages here using MM.AddMesssage procedures
   MM.EndUpdate;

   WS.DM_ShowMessageView;         // display messages
End;
AI-LocalizedAI로 번역됨
만약 문제가 있으시다면, 텍스트/이미지를 선택하신 상태에서 Ctrl + Enter를 누르셔서 저희에게 피드백을 보내주세요.
기능 제공 여부

사용 가능한 기능은 보유하고 계시는 Altium 솔루션에 따라 달라집니다. 해당 솔루션은 Altium Develop, Altium Agile의 에디션(Agile Teams 또는 Agile Enterprise), 또는 활성기간 내의 Altium Designer 중 하나입니다.

안내된 기능이 고객님의 소프트웨어에서 보이지 않는 경우, 보다 자세한 내용을 위해 Altium 영업팀 에 문의해 주세요.

구버전 문서

Altium Designer 문서는 더 이상 버전별로 제공되지 않습니다. 이전 버전의 Altium Designer 문서가 필요하신 경우, Other Installers 페이지의 Legacy Documentation 섹션을 방문해 주세요.

콘텐츠