2013-02-05 12 views
5

Mam coś, co podsłuchuje mnie w niektórych częściach kodu i nie mam pojęcia, co go powoduje.Okno Natychmiastowe VS - Nazwa nie istnieje w bieżącym kontekście

Mam blok kodu, w którym ustawiłem punkt przerwania. Jeśli następnie użyję mojego kursora i zatrzymam kursor nad zmienną, zazwyczaj mogę poruszać się po zawartości i wartościach tej zmiennej.

Podczas gdy niektóre zmienne, nie mogę wyświetlić zawartości, nic się nie pojawia.

Ponadto, jeśli staram bada te nie mogę dzięki bezpośrednim okna, to mówi mi The name 'temp' does not exist in the current context

Jestem bardzo zły na to, dlaczego to się dzieje, kilka liczb całkowitych a innych nie, niektóre obiekty klasy ale nie inne tego samego typu.

Zamknięcie Visual Studio i ponowne uruchomienie go nie rozwiązuje.

Używam debugowania bez optymalizacji.

Po prostu szukasz pomocy w tej sprawie, więc z góry dzięki.

Oto przykład kodu, w którym występuje, bez specjalnego kodu lub delegatów. Może się również zdarzyć w losowych częściach programu, nawet jeśli istnieje tylko kilka linii kodu.

segs2D = ConvertSegmentsTo3DLines(segs2D); 
IList<DSegment2D> segs3D = DSegment2D.Duplicate(segs2D); 
TransformSegments(segs3D, transform); 
foreach (var seg in segs3D) 
    MoveSegmentToSolid(seg, moveNormal, solid, false); 

Dictionary<double, Strategy> strategiesDic = new Dictionary<double, Strategy>(); 

double d1 = (double)(segs3D[0].GetP1Tag() ?? 0); 
double d2= (double)(segs3D[0].GetP2Tag() ?? 0); 
foreach (DSegment2D seg in segs3D) 
{ 
    d1= (double)(seg.GetP1Tag() ?? d1); 
    d2= (double)(seg.GetP2Tag() ?? d2); 
    ...Stuff 
} 

+1

Może pomóc, jeśli możesz opublikować niektóre próbki kodu, które wykazują zachowanie. –

+0

@AndrewCooper Code added. –

+0

I ... gdzie jest obecny punkt przerwania. A jakie zmienne widzisz i czego nie widzisz? –

Odpowiedz

0

Okazuje się, że Sama złożoność metody i liczba nacięć było przyczyną problemu w czasie. Od tego czasu uproszczono i działałem w dużej mierze z oryginalnego kodu i nie mam już tego problemu. Mam również upgrade do VS2012, który może również pomóc.

0

Może zmienne nie są jeszcze uznane lub zainicjowany w bloku kodu, gdzie został trafiony punkt przerwania (czyli wykonanie nie ma tak daleko).

Na przykład, zarówno bezpośrednim kwestie okno, które opisane mogą się pojawić w odniesieniu do bar w następnym bloku kodu po trafieniu przerwania unosić i:

public class Whatever 
{ 
    public void DoSomething() 
    { 
     string foo = "blah"; // Breakpoint hit and execution stopped here. 

     // Do something. 

     DoSomethingElse(); 
    } 

    public void DoSomethingElse() 
    { 
     string bar = "yack"; 

     // Do something else. 
    } 
} 
+0

Zdecydowanie nie problem. Wiem, że punkt przerwania znajduje się w kodzie, którego szukam. –

+2

Może tak, @Craig White. Można by mieć taką nadzieję. :) Prawo skąpstwa jest często podstawą tych problemów, gdy przekonaliśmy się, że w przeciwnym razie jest wszystko, co mówię - zwłaszcza w kodzie z potrójnie zagnieżdżonymi pętlami. Wydaje się, że debugger uważa, że ​​zmienne są poza zakresem, a jest on prawdopodobnie poprawny. – J0e3gan

4

Ponadto, jeśli staram zbadania tych nie mogę przez bezpośrednim okna, to mówi mi o nazwie „temp” nie istnieje w bieżącym kontekście

spróbuje użyć pełnej nazwy metody

na przykład:

namespace.class.method();

zamiast z

class.method();

wydaje się również, że okno bezpośrednie ma zależność od bieżącego wybranego pliku/projektu.

nadzieję, że to pomaga Mathias

0

Miałem podobny problem.Myślałem, że jestem w debugowaniu, ale był jeszcze jeden prosty (ale ważny) krok. W przypadku, gdy "Konfiguracje rozwiązań" jest ustawione na "Debugowanie", musiałem TAKŻE kliknąć strzałkę w dół obok "Debugowanie" i wybrać "Menedżer konfiguracji ...", a następnie w tym odpowiednim oknie podręcznym "Konfiguracja" był nadal ustawiony na "Zwolnienie" - I musiał zmienić to na "Debugowanie" i kliknąć przycisk "Zamknij". Ponowne uruchomienie pozwoliło mi wyświetlić wszystkie zmienne podczas debugowania.

Powiązane problemy