EGL 애플리케이션 디버깅

디버깅은 오류의 원인을 정확히 나타내기 위해 프로그램의 실행을 모니터링하는 프로세스입니다. EGL 디버거를 사용하면 중단점(실행이 일시정지하는 장소)을 설정하고 변수를 검사하거나 변경하며 한 번에 한 단계씩 프로그램을 통해 이동할 수 있습니다. 다음 코드를 디버그할 수 있습니다.
  • 프로그램
  • 웹 트랜잭션
  • Rich UI 핸들러
가장 간단한 디버깅의 경우 다음 단계를 포함합니다.
  • 프로그램을 일시중단할 환경 설정을 선택하십시오. > 환경 설정 > EGL > 디버그를 클릭하십시오. 실행 일시중단에서 초기 실행 단위의 첫 번째 행에서 중지를 클릭하십시오.
  • UI 기술에 기반하여 실행할 파일을 선택하십시오.
    • 웹 트랜잭션의 경우 EGLWebStartup.jsp를 마우스 오른쪽 단추로 클릭하고 다른 이름으로 디버그 > 서버에서 디버그를 클릭하십시오.
    • 일괄처리 프로그램의 경우 .egl 파일을 마우스 오른쪽 단추로 클릭하고 다른 이름으로 디버그 > EGL 프로그램을 클릭하십시오.
    • Rich UI의 경우 .egl 파일을 마우스 오른쪽 단추로 클릭하고 다른 이름으로 디버그 > EGL Rich UI 애플리케이션을 클릭하십시오. 자세한 정보는 Rich UI 디버깅를 참조하십시오.
  • 프로그램을 시작하십시오.
  • 코드는 실행 단위의 첫 번째 행에서 일시중단하고 EGL이 디버그 퍼스펙티브로 변경할지 여부를 사용자에게 묻습니다. 를 클릭하십시오.
  • Step Into 단추를 클릭하여 프로그램을 통해 이동하십시오.

SQL 액세스용으로 JDBC를 통한 디버깅

디버거는 SQL 액세스를 위해 JDBC를 사용하며, 이는 JDBC가 사용되지 않는 환경에서 실행하는 것과 다음과 같이 다릅니다.
  • JDBC가 2단계 커미트를 지원하지 않습니다. 커미트 및 롤백을 위해 SQL 관리자와 WebSphere® MQ (이전의 MQSeries®) 관리자에 대한 개별 호출이 있습니다. 따라서 문제점이 발생하면 하나의 자원이 다른 자원에 대해 해당하는 커미트나 롤백 없이 커미트하거나 롤백할 수 있습니다.
  • JDBC는 항상 동적 SQL을 실행합니다. 생성된 COBOL은 EGL prepare 명령문 또는 테이블 이름 호스트 변수(SQLRecord 정의의 tableNameVariables 특성)를 사용하는 경우를 제외하고 정적 SQL을 사용합니다. 따라서 다음과 같은 차이가 있습니다.
    • 동적 모드에서, 단일 행 선택으로 인해 sysVar.sqlData.sqlCode를 -811로 설정하지 않고 둘 이상의 행이 리턴될 수 있습니다. 기준에 맞는 하나의 행만 있는 경우에 한해서 사용자는 차이를 알지 못합니다. 중요한 경우 이 차이를 해결하는 방법에 대해 다음 샘플 기술을 참조하십시오.
    • JDBC가 "FOR BIT DATA" 옵션을 사용하여 CHAR, DBCHAR 또는 MBCHAR SQL 열로 호스트에 정의된 데이터를 변환합니다. 이러한 상황에서 "FOR BIT DATA"로 정의된 SQL 열에 해당하는 필드에 대해 asBytes 특성을 YES로 설정하십시오.
또한 다음 제한사항이 디버그 및 Java™ 프로그램 둘 다에 적용됩니다. 디버그 및 생성된 COBOL 프로그램 간에 차이가 있지만, 디버그 및 생성된 Java 프로그램 간에는 차이가 없습니다.
  • 이러한 유형이 포함된 SQL 열에 대해 필드를 정의할 때 DATE, TIME 및 TIMESTAMP 기본 유형을 사용해야 합니다. SQL 열의 유형을 표시하는 데 CHAR 변수에 sqlDataCode 특성이 설정되어 있는 경우에 한해서 CHAR 기본 유형을 사용할 수 있습니다. 또한 sqlDataCode 특성 없이 CHAR을 사용할 수 있지만, sqlDataCode를 생략하는 경우 데이터를 CHAR 형식으로 변환하려면 JDBC 드라이버를 신뢰해야 합니다. sqlDataCode에 대한 추가 정보는 sqlDataCode의 내용을 참조하십시오.
  • 특정 SQL 정보가 JDBC에서 지원되지 않습니다.
    • sqlLib.sqlData.sqlerrmc
    • sqlLib.sqlData.sqlwarn[n]
    • sysVar.sqlData.sqlerrmc
    • sysVar.sqlData.sqlwarn[n]

더 복잡한 디버깅에는 실행 구성, 중단점, 데이터베이스 연결, 벼수 값 설정 및 기타 개념이 포함됩니다. 개요를 보려면 EGL 디버거에서 애플리케이션을 통해 스테핑의 내용을 참조하십시오.

호스트와 다른 환경 디버그

디버그 환경이 호스트 환경과 다른 경우 사용할 수 있는 기술이 있습니다. EGL -> 디버그 환경 설정에서 systemType을 DEBUG로 설정을 선택하십시오. EGL 프로그램에서 다음과 같은 로직을 포함할 수 있습니다.
	if (sysVar.systemType is debug) 	
	   // do nothing
	else
	   //  check for sysVar.sqlData.sqlCode = -811 
	end

이를 통해 호스트 시스템에서만 유효한 시스템별 로직을 포함할 수 있습니다.

키보드 차이에 대한 정보는 validationBypassKeys 또는 helpKey에서 EGL 함수 키 맵핑 테이블을 참조하십시오.

호스트 환경이 워크스테이션과 다른 코드 페이지를 사용하는 경우 디버거에서 사용되는 코드 페이지도 변경해야 할 수 있습니다. 세부사항은 EGL 디버거용 문자 인코딩 옵션의 내용을 참조하십시오.

프로그램 디버깅

JEE에서 실행하지 않는 프로그램을 디버그하려면 EGL 디버거에서 애플리케이션을 통해 스테핑에 설명된 대로 디버그 세션을 시작할 수 있습니다.

EGL 디버거 명령에 대한 정보는 EGL 디버거 제어의 내용을 참조하십시오. 빌드 디스크립터 설정이 EGL 디버거에 영향을 미치는 방식에 대한 자세한 정보는 빌드 디스크립터 설정이 EGL 디버거에 영향을 미치는 방식의 내용을 참조하십시오.