6

Dodaję fragment kodu do okna oglądania z kodu w czasie wykonywania, kopiując go z kodu i dodając go do okna zegarka. Jeśli kod zawiera metodę taką jak Convert.ToString(), XMLDocument.Load(), File.Write() itp. Domyślnego obszaru nazw .NET, takiego jak System.IO, System.Xml itp., To daje błąd: " Nazwa "Convert" nie istnieje w bieżącym kontekście ", ale nie daje błędu, gdy dodaję pełną przestrzeń nazw do dodanego fragmentu kodu w oknie oglądania, jak: System.Convert.ToString (123) podaje poprawną wartość. Kod mojego programu nie ma pełnej przestrzeni nazw przed wywołaniem jakiejkolwiek metody ramowej .NET, ponieważ jeśli dodaję przestrzeń nazw przed wywołaniem jakiejkolwiek metody, to jaki jest pożytek z dodawania przestrzeni nazw na górze każdego pliku za pomocą słowa kluczowego "using". Jeśli dodaję przestrzeń nazw powyżej kodu w pliku, to nie muszę dodawać całej przestrzeni nazw w kodzie tego pliku przed wywołaniem metody. Co mogę zrobić oprócz dodawania pełnej przestrzeni nazw w oknie podglądu za każdym razem, gdy kopiuję kod do listy obserwowanych, aby zegarek nie podawał błędu. Zrzut ekranu poniżej: enter image description hereDodaj zegarek bez pełnej przestrzeni nazw w Visual Studio

Aktualizacja: Dodaje metodę do listy kontrolnej, aby sprawdzić wynik metody przed jej wykonaniem. Upewnia się, że wykonanie metody nie spowoduje żadnego błędu lub wyjątku podczas wykonywania i mogę edytować kod, ponieważ metoda ta nie została faktycznie wykonana w trakcie wykonywania kodu programu. Wprowadzam przerwę w kodowaniu wywołania tej metody i dodam ten kod w oknie podglądu, aby sprawdzić, czy nie ma jakiegoś błędu, ponieważ jeśli tego nie zrobię, muszę ponownie uruchomić cały program, aby poprawić wartość czas.

+0

Nigdy nie widziałem okna zegarka używanego do metody, używam go zwykle do oglądania wartości * zmiennej – Sayse

+0

@ Sayse Jak sprawdzasz wynik metody przed jej wykonaniem, aby upewnić się, że nie daje żadnego błędu ani wyjątku podczas wykonywania. Wprowadzam przełom w kodzie wywołania tej metody i dodam ten kod w oknie podglądu, aby sprawdzić, czy nie ma jakiegoś błędu. Jeśli tego nie zrobię, muszę ponownie uruchomić cały program, aby poprawić wartość czas. –

+0

Staram się pisać kod, który nie powoduje wyjątków, a jeśli tak, to msdn ma obszerną dokumentację, która zwykle mówi mi, co powinienem złapać. Do debugowania, jak powiedziałem, obserwując zmienne i punkty przerwania. Nie mówię, że to, co robisz, jest złe, po prostu nie używam zegarków w ten sposób, wydaje mi się to dziwne. – Sayse

Odpowiedz

1

Debugger używa kontekstu, w którym obecny jest wskaźnik instrukcji (mała żółta strzałka po lewej stronie okna źródłowego), aby spróbować ocenić funkcję.

Więc jeśli linia kodu, w której jesteś zatrzymany, "używa System;" w górnej części pliku powinieneś móc wpisać Convert.ToInt32 (123) w oknie oglądania. Jeśli znajdujesz się w innym pliku, który nie ma tego przy użyciu, musisz całkowicie zakwalifikować nazwę.

Próbowałem tego z poniższego testu:

// Main.cs 
using System; 
namespace TestCon 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Foo foo = new Foo(); 

      Console.WriteLine(Convert.ToString(123)); 
      Console.WriteLine(Convert.ToInt32("234")); 
     } 
    } 
} 

//Foo.cs (note that there are no using statements in this file) 
namespace TestCon 
{ 
    class Foo 
    { 
     public Foo() 
     { } 
    } 
} 

Gdybym krok do dowolnego punktu w main.cs pliki można skopiować wyrażenia konwertować do okna oglądać bez kwalifikatora przestrzeni nazw System i będą one ocenić . Jeśli wkroczę (lub złamie do punktu przerwania) w moim konstruktorze Foo(), otrzymuję komunikat "Nazwa" Konwertuj nie istnieje w bieżącym kontekście ", chyba że dodaję kwalifikator obszaru nazw System na początku.

Uwaga: Nawet jeśli można wyliczyć wyrażenie, konieczne jest często naciśnięcie przycisku odświeżania (dwie strzałki w okręgu po prawej stronie okna zegarka), ponieważ debugger nie może stwierdzić, czy wywołanie CLR spowoduje działania niepożądane.

Nadzieję, że pomaga.

Powiązane problemy