다음을 통해 공유


플러그 인 디버깅

 

게시 날짜: 2017년 1월

적용 대상: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

다음 단계는 Microsoft Dynamics 365 온-프레미스에서 실행되는 플러그 인을 디버깅하는 방법에 대해 설명합니다.Microsoft Dynamics 365(온라인)의 샌드박스에서 실행되는 플러그 인을 디버깅하려면 이 항목의 뒷부분에 설명된 대로 추적을 사용해야 합니다.

이 항목의 내용

Debug a plug-in

샌드박스가 적용된 플러그 인 디버깅

로깅 및 추적

플러그 인 디버깅

  1. 플러그 인 어셈블리를 등록하고 배포합니다.

    동일한 위치에 있는 다른 어셈블리 사본이 있고 Microsoft Dynamics 365에서 잠겨 있어 해당 사본을 덮어쓸 수 없을 경우 플러그 인을 실행하던 서비스 프로세스를 다시 시작해야 합니다. 올바른 서비스 프로세스는 아래 표를 참조하십시오.추가 정보: 플러그 인 등록 및 배포

  2. 디버거를 구성합니다.

    플러그 인을 실행할 Microsoft Dynamics 365 서버에서 프로세스에 디버거를 연결합니다. 프로세스를 확인하려면 다음 표를 참조하십시오.

    플러그 인 등록 구성

    서비스 프로세스

    온라인

    w3wp.exe

    오프라인

    Microsoft.Crm.Application.Hoster.exe

    비동기 등록 플러그 인(또는 사용자 지정 워크플로 어셈블리)

    CrmAsyncService.exe

    샌드박스(격리 모드)

    Microsoft.Crm.Sandbox.WorkerProcess.exe

    동일한 실행 파일을 실행하는 프로세스가 여러 개 있을 경우(예: 여러 w3wp.exe 프로세스) 디버거를 실행 중인 실행 프로세스의 모든 인스턴스에 연결합니다. 그런 다음 플러그 인 코드에 하나 이상의 중단점을 설정합니다.

  3. 플러그 인을 테스트합니다.

    Microsoft Dynamics 365 응용 프로그램 또는 SDK를 사용하는 다른 사용자 지정 응용 프로그램을 실행하고 플러그 인을 실행시키는 데 필요한 작업을 수행합니다. 예를 들어 플러그 인이 계정 생성 이벤트에 등록되어 있으면 새 계정을 만듭니다.

  4. 플러그 인 코드를 디버깅합니다.

    원하는 대로 수행하도록 코드에 필요한 변경을 수행합니다. 코드가 변경되면 코드를 어셈블리로 컴파일하고 필요에 따라 이 절차의 1~4단계를 반복합니다. 하지만 플러그 인 어셈블리의 주 버전 또는 부 버전 번호를 변경하면 이전 버전의 어셈블리를 등록 취소하고 새 버전을 등록해야 합니다.추가 정보: 플러그 인 등록 및 배포

  5. 데이터베이스에서 플러그 인을 등록합니다.

    플러그 인에 대해 편집/컴파일/배포/테스트/디버그 주기를 완료한 후 (온-디스크) 플러그 인 어셈블리를 등록 취소한 후 Microsoft Dynamics 365 데이터베이스에서 플러그 인을 다시 등록합니다.추가 정보: 플러그 인 등록 및 배포

데이터베이스 배포 플러그 인을 디버깅할 수 있습니다. 컴파일된 플러그 인 어셈블리의 기호 파일 (.pdb)를 서버의 <crm-root>\Server\bin\assembly 폴더에 복사한 후 IIS(인터넷 정보 서비스)를 다시 시작해야 합니다. 디버깅이 완료되면 기호 파일을 제거하고 플러그 인을 실행하던 프로세스에서 추가 메모리를 사용하지 못하도록 IIS를 다시 설정해야 합니다.

플러그 인 프로파일러 도구를 사용하여 플러그 인 디버깅하는 방법에 대한 자세한 내용은 플러그 인 성능 분석을 참조하십시오.

샌드박스가 적용된 플러그 인 디버깅

샌드박스가 적용된 플러그 인을 실행하기 전에 이러한 단계를 수행하는 것이 중요합니다. 플러그 인을 이미 실행한 경우 서버에서 어셈블리 해시를 변경하도록 어셈블리의 코드를 변경하거나 샌드박스 서버에서 Microsoft Dynamics 365 샌드박스 처리 서비스를 다시 시작합니다.

서버 구성

샌드박스 호스트 프로세스는 플러그 인을 실행 중인 샌드박스 작업자 프로세스를 모니터링합니다. 호스트 프로세스는 플러그 인이 응답을 중지하는지, 메모리 임계값을 초과하는지 등을 확인합니다. 작업자 프로세스가 30초 이상 응답하지 않으면 종료됩니다. 샌드박스 플러그 인을 디버깅하려면 이 시스템 종료 기능을 비활성화해야 합니다. 시스템 종료 기능을 비활성화하려면 다음 레지스트리 키를 1(DWORD)로 설정합니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM\SandboxDebugPlugins

플러그 인 디버그

샌드박스가 적용된 플러그 인을 디버깅하려면 다음 단계를 수행합니다.

  1. 샌드박스(격리 모드)에서 플러그 인을 등록하고 Microsoft Dynamics 365 서버 데이터베이스에 배포합니다.

  2. 컴파일된 플러그 인 어셈블리의 기호 파일(.pdb)을 Microsoft.Crm.Sandbox.WorkerProcess.exe라는 샌드박스 작업자 프로세스를 실행 중인 서버의 server\bin\assembly 폴더에 복사합니다. 이 서버는 샌드박스 처리 서비스 역할을 호스팅하는 서버입니다.

  3. 이 항목의 앞부분에 설명된 2~4단계의 지침을 따릅니다.

플러그 인 프로파일러 도구를 사용하여 플러그 인 디버깅하는 방법에 대한 자세한 내용은 플러그 인 성능 분석을 참조하십시오.

로깅 및 추적

Microsoft Visual Studio의 디버깅과 비교하여 플러그 인 또는 사용자 지정 워크플로 활동(사용자 지정 코드)을 문제 해결하는 대체 방법은 추적 기능을 사용하는 것입니다. 추적 기능은 코드 실패의 원인을 진단하는 방법으로 실시간 사용자 지정 정보 기록하여 개발자를 지원합니다. 추적 기능은 해당 시나리오에서 지원되는 유일한 문제 해결 방법이므로 Microsoft Dynamics 365(온라인) 등록 사용자 지정 코드를 문제 해결할 때 특히 유용합니다. 추적 기능은 샌드박스(부분 신뢰) 및 전체 신뢰 등록 사용자 지정 코드와 동기 또는 비동기 실행 동안에 지원됩니다. 추적은 Outlook용 Microsoft Dynamics 365 또는 다른 모바일 클라이언트에서 실행되는 사용자 지정 코드에는 지원되지 않습니다.

Microsoft Dynamics 365에 대한 런타임 추적 정보의 기록은 ITracingService라는 서비스에서 제공됩니다. 사용자 지정 코드에 의해 이 서비스에 제공되는 정보는 이곳에 나와 있는 세 가지 다른 장소에 기록될 수 있습니다.

  • 추적 로그

    PluginTraceLog 유형의 추적 로그 레코드는 설정으로 이동하여 플러그 인 추적 로그 타일을 선택하여 웹 응용 프로그램에서 찾을 수 있습니다. 타일은 할당된 보안 역할에서 추적 로그 엔터티 레코드에 대한 액세스 권한이 있는 경우에만 표시됩니다. 이러한 레코드의 작성은 다음 절에서 언급하는 추적 설정에 의해 제어됩니다.PluginTraceLog 엔터티에 대한 자세한 내용은 엔터티별 권한을 참조하십시오.

    참고

    추적 로깅은 특히 많은 추적과 로깅이 생성될 때 조직의 저장소 공간을 차지합니다. 디버깅과 문제 해결을 위해서만 추적 기능을 켜야 하며 조사가 완료된 후에는 기능을 꺼야 합니다.

  • 오류 대화 상자

    플랫폼에 예외를 반환하는 동기 등록 플러그 인 또는 사용자 지정 워크플로 활동은 로그온한 사용자에게 제공되는 웹 응용 프로그램에서 오류 대화 상자가 표시되도록 합니다. 사용자는 대화 상자에서 로그 파일 다운로드 단추를 선택하여 예외와 추적 출력이 포함된 로그를 볼 수 있습니다.

  • 시스템 작업

    예외를 반환하는 비동기 등록 플러그 인 또는 사용자 지정 워크플로 활동의 경우 추적 정보는 웹 응용 프로그램의 시스템 작업자세히 영역에 표시됩니다.

추적 로깅 사용

이 기능을 지원하는 조직에서 추적 로깅을 사용하려면 웹 응용 프로그램에서 설정 > 관리 > 시스템 설정으로 이동합니다.사용자 지정 탭에서 플러그 인 추적 로그에 로깅 사용이라는 드롭다운 메뉴를 찾아 사용 가능한 옵션 중 하나를 선택합니다.

옵션

설명

끄기

추적 로그에 쓰기는 사용할 수 없습니다.PluginTraceLog 레코드가 만들어지지 않습니다. 그러나 사용자 지정 코드는 로그가 작성되지 않더라도 Trace 메서드를 호출합니다.

예외

예외가 사용자 지정 코드의 플랫폼으로 전달되는 경우 추적 정보가 로그에 기록됩니다.

모두

예외가 사용자 지정 코드의 플랫폼으로 전달되는 경우 코드가 완료되면 추적 정보가 로그에 기록됩니다.

추적 로깅 설정이 예외로 설정되고 사용자 지정 코드가 플랫폼으로 예외를 반환하는 경우 추적 로그 레코드가 만들어지고 추적 정보가 다른 위치에도 기록됩니다. 동기적으로 실행되는 사용자 지정 코드의 경우 정보가 오류 대화 상자의 사용자에게 표시되며, 그렇지 않고 비동기 코드의 경우 정보가 관련 시스템 작업에 기록됩니다.

기본적으로 시스템 관리자 및 시스템 사용자 지정자 역할에는 추적 로깅 설정을 변경하는 데 필요한 권한이 있으며 TraceSettings 엔터티 레코드에 저장됩니다. 추적 설정에는 조직 범위가 있습니다.

추적 서비스에 기록

추적 서비스에 기록하기 전에 먼저 전달된 실행 컨텍스트에서 추적 서비스 개체를 추출해야 합니다. 그런 후에 해당 메서드 호출의 관련 진단 정보를 전달하는 사용자 지정 코드에 Trace 호출을 추가하면 됩니다.


//Extract the tracing service for use in debugging sandboxed plug-ins.
ITracingService tracingService =
    (ITracingService)serviceProvider.GetService(typeof(ITracingService));

// Obtain the execution context from the service provider.
IPluginExecutionContext context = (IPluginExecutionContext)
    serviceProvider.GetService(typeof(IPluginExecutionContext));

// For this sample, execute the plug-in code only while the client is online. 
tracingService.Trace("AdvancedPlugin: Verifying the client is not offline.");
if (context.IsExecutingOffline || context.IsOfflinePlayback)
    return;

// The InputParameters collection contains all the data passed 
// in the message request.
if (context.InputParameters.Contains("Target") &amp;&amp;
    context.InputParameters["Target"] is Entity)
{
    // Obtain the target entity from the Input Parameters.
    tracingService.Trace
        ("AdvancedPlugin: Getting the target entity from Input Parameters.");
    Entity entity = (Entity)context.InputParameters["Target"];

    // Obtain the image entity from the Pre Entity Images.
    tracingService.Trace
        ("AdvancedPlugin: Getting image entity from PreEntityImages.");
    Entity image = (Entity)context.PreEntityImages["Target"];

그런 다음 플러그 인 또는 사용자 지정 워크플로 활동을 빌드하고 배포합니다. 사용자 지정 코드를 실행하는 동안 Trace 메서드 호출에 제공되는 정보는 조직에서 지원하고 사용하도록 설정된 경우 ITracingService에 의해 추적 로그 엔터티 레코드에 기록되며 이전 섹션에서 설명한 대로 웹 대화 상자나 시스템 작업에서도 사용할 수 있습니다. 추적 로그에 기록된 추적 정보는 추적 설정에서 구성됩니다. 자세한 내용은 추적 로깅 사용를 참조하십시오.

참고

사용자 지정 코드가 데이터베이스 트랜잭션 내에서 실행되고 트랜잭션이 롤백되는 예외가 발생할 경우 코드에서 수행한 모든 엔터티 데이터 변경 내용은 적용되지 않습니다. 그러나 롤백이 완료된 후에도 PluginTraceLog 레코드는 유지됩니다.

추적 서비스 정보

ITracingServiceTrace 메서드를 통해 제공된 정보를 일괄 처리합니다. 사용자 지정 코드가 성공적으로 실행되거나 예외가 throw된 후 정보는 새 PluginTraceLog 레코드에 기록됩니다.

PluginTraceLog 레코드의 수명은 유한합니다. 대량 삭제 백그라운드 작업은 하루 한 번 실행되어 만들어진지 24시간 이상된 레코드를 삭제합니다. 이 작업은 필요할 때 해제할 수 있습니다.

참고 항목

플러그 인 개발
플러그 인 성능 분석
플러그 인 등록 및 배포
이벤트 실행 파이프라인
플러그 인 작성
플러그 인 격리, 트러스트 및 통계
PluginTraceLog 엔터티 메시지 및 메서드

Microsoft Dynamics 365

© 2017 Microsoft. All rights reserved. 저작권 정보