2009-06-12 4 views
8

첫 번째 타이머 작업을 만들고 디버깅하고 싶습니다. 기능을 통해 타이머 작업을 설치하고 웹 응용 프로그램의 JobDefinitions 컬렉션에 추가하고 테스트 목적으로 5 분마다 실행하도록 SPMinuteSchedule을 추가했습니다.Sharepoint 타이머 작업 디버그

그런 다음 Visual Studio에서 웹 응용 프로그램의 프로세스, 중앙 관리 프로세스 및 OWSTIMER.exe 프로세스에 디버거를 연결하려고 시도했지만 TimerJob의 Execute 메서드로 디버깅하지 않습니다. 내가 여기서 무엇을 놓치고 있는지.

P. 타이머 작업 상태가 성공했다고 표시되어 실행 중입니다. 이상한 ...

답변

9

TimerJobs를 디버깅 할 때 나는 항상 실패 할 Execute 메서드의 맨 처음에 어설 션을 삽입합니다. TimerJob이 시작되었고 디버거를 연결할 충분한 시간을 가질 수 있도록 Execute 메서드가 호출 될 때마다 팝업이 나타납니다. 물론 당신이 살기 전에 어설 션을 제거해야합니다.

System.Diagnostics.Trace.Assert(false); 

더 중요한 점은 새 DLL을 배포 한 후에 타이머 서비스를 다시 시작한다는 것입니다. 그렇지 않으면 Timer Service가 이전 DLL에서 TimerJob을 실행합니다. 창을 \ \ assemly \ GAC_MSIL \ <의 AssemblyName> \ 폴더 :

+0

지금 다소 문제가있는 것 같습니다 ... CLeaned 솔루션과 타이머를 다시 시작하면 디버거가 작동 중입니다 ... – Colin

+0

대단해! TimerJobs 디버깅도 나에게 두통을 일으켰습니다. – Flo

+1

어설 션을 통해 흥미로운 아이디어 ... 또한 Trace.Assert 대신 Debug.Assert를 사용하는 경우 모든 릴리스 빌드에는 해당 코드가 없습니다 (디버그 빌드의 somepoint에서 어쨌든 주석을 달고 싶을지라도). – mundeep

2

가장 일반적인 이유는 :

  1. 당신은 디버그 빌드를 수행 했습니까?
  2. .pdb 파일을 어셈블리와 같은 폴더에 저장 했습니까? (간단한 search은 어떻게 설명해야합니까? 예 : Debugging Timer Jobs)
  3. MSDN의 Debugging Custom Timer Jobs에서도 몇 가지 팁을 읽을 수 있습니다.
  4. 3 R 수행 : 다시 빌드 & 어셈블리 재배포 & 다시 연결하기 전에 타이머 서비스를 다시 설정하십시오.
+0

추가 한 Debug.Assert = 거짓, 내 컴퓨터를 다시 시작하지만, OWSTimer 내 PDB를로드하지 않습니다 (I 심지어 C로 복사? ??? – Colin

+0

프로젝트를 다시 빌드하고 Windows 탐색기로 수동으로 assebly를 제거한 다음 탐색기로 파일을 수동으로 복사 한 다음 pdb를 다시 복사하고 디버그가 프로세스에 연결됩니다 .... – Colin

+0

사과는 일반적인 재 작성/재실행/재시작 프로세스가 응답을 편집합니다 :) – mundeep

관련 문제