2012-10-19 4 views
0

디버그 모드에서 변수를 모니터링하려면 감시가 있어야합니다. 변수를 변경, 제거 또는 다른 개체에 할당 할 수 있습니다.Visual Studio에서 특정 개체를 모니터링 하시겠습니까?

하지만 내 뜻은 메모리에있는 객체 상태를 모니터하는 것입니다. 이 방법은 이상 1 번 호출됩니다

void DoSomething(object anObject){ 
    object tempObject = anObject; 
} 

:

내가 변수

즉에 객체를 받아 지정하는 방법을 말한다.

이 tempObject에서 Watch를 사용하면 Watch의 tempObject가 새 할당 된 개체 값을 변경할 때 계속 변경됩니다.

여기 내가 관심있어하는 것은이 anObject를 대신보아야한다는 것입니다. 두 번째 호출에서이 메서드를 호출하면이 anObject의 centain 매개 변수가 잘못되었음을 알았습니다.이 잘못된 매개 변수가 언제 올바른 매개 변수로 변경되었는지 확인하려면이 개체를 추적하고 싶습니다. (심지어 범위를 벗어남).

어떻게하면됩니까? 또는 Visual Studio에서이 작업을 수행 할 수 있습니까?

지금 당장 나는 비슷한 문제가 있기 때문에 나는 centain 객체를 가지고있다. 나는 그것이 처형되었음을 알지만, 어떻게 든 어딘가에 다시 사용된다. 시계를 사용하면 그것이 제가 지켜본 동일한 대상인지 전혀 알 수 없습니다.

나는 이것을 분명히하기를 희망한다.

+0

Dispose()에 중단 점을 지정하면 조기 호출의 범위가 좁아집니다. 다른 목적을 위해 항상 조건부 중단 점이있을 수 있습니다. – Ankush

+0

@Ankush 이미했는데 Dispose 메서드가 실행 된 것을 보았습니다. 매개 변수가 변경되었습니다. 하지만 나중에 동일한 매개 변수를 가진 객체를 볼 수는 있지만 폐기되지는 않습니다. 동일한 객체인지 아닌지 전혀 알 수 없습니다. Disposed 메서드에서 특정 매개 변수를 true로 설정합니다. –

+0

ReferenceEqual을 평가하여 두 객체가 같거나 같은지 확인할 수 있습니다. – Ankush

답변

1

해당 객체에 WeakReference을 잡고 시도해보십시오. 거기에서 WeakReference의 대상과 문제의 대상이 실제로 같은 대상인지 확인할 수 있습니다.

+0

Visual Studio 자체로 디버그 모드에서 이러한 종류의 작업을 수행 할 수 없습니까? (우리가 Watch를 사용하는 것만 큼 쉽다는 의미입니다.) 이것은 제가 지금하고있는 일입니다. 객체 참조를 유지하기 위해 코드를 수정 한 다음 직접 확인하십시오. –

+0

알 수 없습니다. 나는 이것이 깔끔한 디자인과 중단 점의 적절한 위치에 의해 쉽게 해결된다고 가정 할 수 있습니다. – doogle

+0

WeakReference를 사용하는 대신 WeakReference를 사용하는 이유는 WeakReference가 여전히 GC에 의해 개체를 수집 할 수있게한다는 것입니다. 이렇게하면 응용 프로그램의 정상적인 흐름을 방해하지 않고 디버깅 할 수 있습니다. – doogle

0

개체는 강력한 참조가있는 한 가비지 수집기에서 처리하지 않습니다. 일부 코드는 개체에서 Dispose를 호출하거나 약한 참조를 사용 중일 수 있습니다.

Son of Strike 디버깅 확장을 사용하면 언제든지 개체의 GC 루트를 추적 할 수 있습니다. 우리가 이벤트 알림을받을 수 있는지 확실하지 않습니다.

관련 문제