1

관리 코드 용 VS2010 디버거를 사용하면 파이널 라이저 스레드가 실행되도록 트리거 할 수 있습니까?VS2010 디버거의 파이널 라이저 트리거

사용 케이스 :

작업이 자체가 예외를 던진 그 알아서되지 않은 경우 Task 개체의 종료 자에 예외를 던질 수 Tasks 사용.

해결사가 제대로 작동하는지 확인하기 전에 마무리 자 스레드가 시작될 때까지 기다려야하므로 처리되지 않은 버그 수정을 확인하는 데 많은 시간이 걸릴 수 있습니다.

대개 두통이 생기기 때문에 보통 finalizer를 사용하지 않고 코드를 작성하지 않으며 이에 대해 Microsoft에 우편으로 보냈습니다. 그러나 이것과 같습니다 : 디버거에서 을 실행하기 위해 finalizer 코드를 실행하려면 어떻게해야합니까? 코드와 반대입니다.

답변

2

AFAIK 디버거에서이 작업을 수행하는 특별한 방법은 없습니다.

당신은 당신의 코드를 실행할 수 있습니다

int i = 0, j = 1; 
    new Task(() => Console.WriteLine(j/i)).Start(); 
    Thread.Sleep(1000); // make sure it has had plenty of time 
    //GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced); 
    //GC.WaitForPendingFinalizers(); 
    Console.WriteLine("Did I explode yet?"); 
    Console.ReadKey(); 

이제 예외가 나타납니다 볼 수있는 두 줄의 주석.

참고 : 은 테스트와 같은 시나리오에 사용되어야합니다. 당신은 정규 코드에서 실제로 GC을 사용하면 안됩니다.

+0

답해 주셔서 감사합니다! 많이 도와 줬어. 캔트는 아직 받아들입니다. 디버깅 중에 만 볼 수있는이 코드를 삽입하고 매력처럼 작동합니다. – vidstige