2012-04-25 4 views
4

나는 사용자 정의 리졸버, 매우 빠르게 실행이 코드를 실행하기 전에 코드디버깅 SDL Tridion 2011 사용자 정의 리졸버와 GetListPublishItems() 메소드 내 C# 템플릿 빌딩 블록 중 하나에

publication.GetListPublishItems(uriTarget, false, false, 
     TDSDefinesInterop.ListColumnFilter.XMLListDefault, listRowFilter); 

의 다음 줄을 가지고있다. 이제 게시판 ItemType에 대한 내 해결자가 구현되었으므로 코드는 매우 느리게 실행됩니다. 이것으로부터 새로운 resolver가 GetListPublishItems() 방법으로 장면 뒤에서 호출되고 있다고 결론 내립니다 (이는 의미가 있습니다). 리졸버를 어떻게 든 수정해야한다고 가정합니다. 그러나 메서드를 호출 할 때 내 해결 프로그램에서 중단 점을 칠 수없는 것 같습니다.

일반적으로 템플릿을 디버깅 할 때 'TcmTemplateDebugHost'에 연결하거나 리졸버를 디버깅 할 때 게시자 프로세스에 직접 연결합니다. My Resolver는 GetListPublishItems() 메서드가 호출 될 때가 아니라 Publish를 처음 누를 때만 공격을받는 것으로 보입니다.

그래서이 질문은 두 가지이다 다음 GetListPublishItems() 메소드를 사용하는 경우

  1. 마 리졸버가 호출되는?
  2. 이들이 호출된다고 가정하면이 시나리오에서 디버깅해야 할 때 어떤 프로세스에 연결해야합니까?
+1

dotPeek (http://www.jetbrains.com/decompiler/) 코드를 살펴 보았습니까? –

+2

"게시 할 항목 표시"는 GUI의 단추이므로 서비스 호스트 프로세스에서 호출 할 것으로 예상됩니다. –

+1

전화를 받았습니까? 네, 2011 년 이래로요. 서비스 호스트가 의심 스럽지만, COM 메소드로 호출 했으므로 dllhost 프로세스를 점검하고 싶을 수 있습니다. –

답변

5

확실하지는 않지만 사용자 지정 해결 프로그램이 GetListPublishItems()에 포함되지 않은 정상적인 시나리오는 상상할 수 없습니다. 귀하의 증거가이를 뒷받침하는 것처럼 보이지만 물론 질문의 두 번째 부분에 답할 수 있다면 확실하게 알 수 있습니다.

호스팅 프로세스에 대한 일반적인 가정은 맞을 것으로 생각합니다. 예를 들어 게시 중에 템플릿을 호출하는 경우 TcmPublisher가 프로세스가됩니다. 또는 GUI에서 게시에 대한 게시 대화 상자를 열고 "게시 할 항목 표시"를 누르면 COM 대행 프로세스 (dllhost.exe)가 될 것입니다. 한 가지 확실한 방법은 Sysinternals Process Explorer를 사용하는 것입니다. Sysinternals Process Explorer에는 주어진 dll이로드 된 프로세스를 검색 할 수있는 매우 편리한 기능이 있습니다. (찾기 메뉴에서 찾습니다)

중단 점에 대한 한 가지 원인은 Visual Studio에서 기호를 올바르게로드 할 수 없다는 것입니다. 템플릿 빌딩 블록을 디버깅 할 때, Tridion은 템플릿 업 로더가 PDB를 배치하는 (CM 구성에서 tridion.templating/debugging/@pdbdirectory) 구성 할 수있는 알려진 위치에서 기호를 명시 적으로로드합니다. 게시자 프로세스에서 사용자 정의 리졸버를로드 할 때 심볼을 찾기위한 특별한 메커니즘이 있는지 의심 스럽기 때문에 표준 .NET 메소드로 폴백해야합니다. 가장 먼저 시도해 볼 것은 어셈블리와 동일한 위치 (예 : bin 디렉토리)에 맞춤 해석기 클래스의 심볼이 있는지 확인하는 것입니다. 아마도 Visual Studio에서 심볼 경로를 구성 할 수 없을 수도 있습니다.

첫 번째로해야 할 일은 Visual Studio에서 디버그 출력을 보는 것입니다. 프로세스를 시작한 다음 프로세스에 연결하면 다양한 어셈블리가로드 된 것을 볼 수 있습니다. Visual Studio에서 기호를 찾을 수 있으면 "기호로드 됨"이라는 출력이 표시됩니다.