Jak używać okna bezpośredniego w programie Visual Studio?

121

Okno bezpośrednie to niezwykle przydatne narzędzie do debugowania aplikacji. Może być używany do wykonywania instrukcji kodu, które są ważne w kontekście punktu przerwania i sprawdzania wartości. Używam go również do wpisywania fragmentów kodu, aby nauczyć się funkcji językowych.

Jak korzystać z okna bezpośredniego?

Phillip Ngan
źródło
Jeśli odwołujesz się do wydawania poszczególnych poleceń programu Visual Studio, spójrz na przykłady w [Immediate Window] [1]. To pokazuje, jak oceniać wyrażenia, wykonywać instrukcje, drukować wartości zmiennych i tak dalej w bezpośrednim oknie. [1]: msdn.microsoft.com/en-us/library/f177hahy(VS.80).aspx
TStamper
2
Istnieje kilka poleceń specjalnych, których listę trudno znaleźć. msdn.microsoft.com/en-us/library/ms171362(v=vs.100).aspx Część mocy windbg jest dostępna. Kiedyś mogłem, mając adres, znaleźć najbliższy symbol. (ln) Myślę, że to zostało głupio wyłączone. Chciałbym mieć polecenie dt windbg do wyświetlania typów w strukturach itp. Przynajmniej możesz wpisać zmienną obiektową, aby uzyskać wszystkie elementy na liście wraz z ich wartościami. (zamiast próbować grać w grę open a node close a node).
kalbr
w przypadku programu Visual Studio 2017 łącze do odpowiedniej dokumentacji to docs.microsoft.com/en-us/visualstudio/ide/reference/…
Pac0

Odpowiedzi:

130

Jeden miły cechą oknie Immediate w Visual Studio jest jego zdolność do oceny wartości zwracanej przez metodę szczególnie jeśli jest ona wywoływana przez kod klienta ale to nie należy do przypisania zmiennej. W trybie debugowania, jak już wspomniano, można wchodzić w interakcje ze zmiennymi i wykonywać wyrażenia w pamięci, co odgrywa ważną rolę w tym.

Na przykład, jeśli masz metodę statyczną, która zwraca sumę dwóch liczb, takich jak:

private static int GetSum(int a, int b)
{
    return a + b;
}

Następnie w oknie bezpośrednim możesz wpisać:

? GetSum(2, 4)
6

Jak widać, działa to bardzo dobrze w przypadku metod statycznych. Jeśli jednak metoda nie jest statyczna, musisz wejść w interakcję z odwołaniem do obiektu, do którego należy metoda.

Załóżmy na przykład, że tak wygląda Twoja klasa:

private class Foo
{
    public string GetMessage()
    {
        return "hello";
    }
}

Jeśli obiekt już istnieje w pamięci i znajduje się w zakresie, możesz wywołać go w oknie bezpośrednim, o ile został utworzony przed bieżącym punktem przerwania (lub przynajmniej przed każdym miejscem, w którym kod zostanie wstrzymany w trybie debugowania):

? foo.GetMessage(); // object ‘foo’ already exists
"hello"

Ponadto, jeśli chcesz współdziałać i przetestować metodę bezpośrednio, bez polegania na istniejącej instancji w pamięci, możesz utworzyć własną instancję w oknie bezpośrednim:

? Foo foo = new Foo(); // new instance of ‘Foo’
{temp.Program.Foo}
? foo.GetMessage()
"hello"

Możesz pójść o krok dalej i tymczasowo przypisać wyniki metody do zmiennych, jeśli chcesz wykonać dalsze oceny, obliczenia itp .:

? string msg = foo.GetMessage();
"hello"
? msg + " there!"
"hello there!"

Ponadto, jeśli nie chcesz nawet deklarować nazwy zmiennej dla nowego obiektu i po prostu chcesz uruchomić jedną z jego metod / funkcji, zrób to:

? new Foo().GetMessage()
"hello" 

Bardzo powszechnym sposobem sprawdzenia wartości metody jest wybranie nazwy metody klasy i wykonanie „Dodaj obserwację”, aby zobaczyć jej aktualną wartość w oknie czujki. Jednak ponownie obiekt musi zostać utworzony i znajdować się w zasięgu, aby została wyświetlona poprawna wartość. Jest to znacznie mniej wydajne i bardziej restrykcyjne niż użycie okna bezpośredniego.

Oprócz metod sprawdzania możesz wykonywać proste równania matematyczne:

? 5 * 6
30

lub porównaj wartości:

? 5==6
false
? 6==6
true

Znak zapytania („?”) Jest niepotrzebny, jeśli jesteś bezpośrednio w oknie bezpośrednim, ale jest tu uwzględniony dla przejrzystości (aby odróżnić wpisane wyrażenia od wyników). Jeśli jednak jesteś w oknie poleceń i potrzebujesz zrobić kilka szybkich rzeczy w oknie bezpośrednim, a następnie poprzedzaj swoje instrukcje znakiem „?” i gotowe.

Intellisense działa w oknie bezpośrednim , ale czasami może być nieco niespójne. Z mojego doświadczenia wynika, że ​​jest dostępny tylko w trybie debugowania, ale nie w trybie projektowania, bez debugowania.

Niestety kolejną wadą okna bezpośredniego jest to, że nie obsługuje on pętli.

Promień
źródło
1
Jak znajdujesz najbliższe okno?
jpaugh
1
Ctrl + Alt + Ilub Debuguj -> Windows -> Natychmiastowe
Ray
11

Użyj okna bezpośredniego do wykonywania poleceń

Bezpośrednie okno może być również używane do wykonywania poleceń. Po prostu wpisz a, >a następnie polecenie.

wprowadź opis obrazu tutaj

Na przykład >shell cmduruchomi powłokę poleceń (może to być przydatne do sprawdzenia, na przykład, jakie zmienne środowiskowe zostały przekazane do programu Visual Studio). >clswyczyści ekran.

Oto lista poleceń, które są tak powszechnie używane, że mają własne aliasy: https://msdn.microsoft.com/en-us/library/c3a0kd3x.aspx

CJBS
źródło
2
niezła wskazówka. W rzeczywistości łączy się to ładnie z inną sztuczką, której używam: >open Filenameotworzy wybrany plik w rozwiązaniu, a nawet dokończy nazwę pliku.
Phillip Ngan
6

Okno bezpośrednie służy do debugowania i oceny wyrażeń, wykonywania instrukcji, drukowania wartości zmiennych i tak dalej. Umożliwia wprowadzanie wyrażeń, które mają być oceniane lub wykonywane przez język programowania podczas debugowania.

Aby wyświetlić okno bezpośrednie, wybierz Debuguj> Windows> Natychmiastowe lub naciśnij Ctrl-Alt-I

wprowadź opis obrazu tutaj

Oto przykład z Immediate Window:

int Sum(int x, int y) { return (x + y);}
void main(){
int a, b, c;
a = 5;
b = 7;
c = Sum(a, b);
char temp = getchar();}

dodaj punkt przerwania

wprowadź opis obrazu tutaj

polecenia połączeń

wprowadź opis obrazu tutaj

https://msdn.microsoft.com/en-us/library/f177hahy.aspx

Isma Rekathakusuma
źródło