Weź następującą funkcję:
DataTable go() {
return someTableAdapter.getSomeData();
}
Czy po ustawieniu punktu przerwania w tej funkcji istnieje możliwość sprawdzenia zwróconej wartości? go()
jest bezpośrednio sprzężony z datagrid na .aspx
stronie.
Jedynym sposobem sprawdzenia zwróconej bazy danych jest użycie zmiennej tymczasowej. Jest to jednak trochę niewygodne. Czy nie ma innej drogi?
c#
visual-studio
visual-studio-debugging
doekman
źródło
źródło
Odpowiedzi:
Nie żebym o tym wiedział. Zauważ, że jeśli zrobić dodać zmienną, zostanie on usunięty przez kompilator w wydaniu buduje tak ...
Aktualizacja: Ta funkcja została dodana do VS2013 . Możesz zobaczyć zwracane wartości w oknach aut lub użyć
$ReturnValue
w oknie zegarka / natychmiastowym.Wartość można zobaczyć tylko bezpośrednio po powrocie z funkcji, dlatego najłatwiejszym sposobem uzyskania do niej dostępu jest umieszczenie punktu przerwania w wywołaniu funkcji i przekroczenie (F10) wywołania.
Aktualizacja dla VS2015: boo! niestety nie wygląda na to, że jest w aktualizacji VS2015 (devenv v14)
dla VS2017: wrócił. (devenv v15)
źródło
Można to zrobić w Visual Studio 2013 z CLR 4.5.1 zgodnie z witryną z opiniami klientów . Nie był dostępny w poprzednich wersjach dla C #.
(Visual Studio 2008 i wcześniejsze wersje wspierały go dla VB.NET. Zawsze był dostępny dla programistów C / C ++.)
źródło
Zgadzam się, że jest to bardzo przydatna rzecz: mieć nie tylko wartość zwracaną przez metodę przed wyjściem z niej, ale także wartość zwracaną przez metody, które właśnie przekroczyłem. Zaimplementowałem go jako część komercyjnego rozszerzenia Visual Studio o nazwie „ OzCode ”.
Dzięki niemu możesz wyświetlić zwracane wartości metod bezpośrednio w edytorze kodu, jako rodzaj wyświetlacza HUD:
Aby uzyskać więcej informacji, zobacz ten film .
źródło
Według Microsoft nie ma możliwości niezawodnego wdrożenia tego kodu zarządzanego. Jest to problem, o którym wiedzą i nad którym pracują:
https://connect.microsoft.com/VisualStudio/feedback/details/597933/add-a-return-pseudo-variable-to-the-visual-studio-debugger-for-net-code
źródło
Odnośnie Visual Studio 2015:
Zgodnie z obecnie akceptowaną odpowiedzią Marc Gravell:
W odpowiedzi stwierdzono również, że ta funkcja nie działa w programie Visual Studio 2015. Nie jest to (całkowicie) prawda. Podczas Sprawdź zwracane wartości wywołań metod znajduje się następująca uwaga:
Przetestowałem to w Visual Studio 2015 Enterprise:
źródło
$ReturnValue
działa. Jednak wartość zwracana nie pojawia się nigdzie, jeśli maszUse managed compatibility mode
włączoną opcję debugowania.Jeśli przejdziesz do menu Narzędzia → Opcje , IntelliTrace i zmienisz ustawienie zbierania zdarzeń i informacji o połączeniach.
Możesz wrócić do poprzedniego zdarzenia wywołania ( Ctrl+ Shift+ F11) i zobaczyć wartość tymczasową zwróconą z wywołania metody w oknie autos jako element potomny nazwy metody.
To nie pokazuje wartości zwracanej dla metody, w której się znajdujesz. Pokazuje tylko wartość zwracaną przez ostatnią metodę wywoływaną w bieżącej metodzie.
Więc jest w porządku
ponieważ pokazuje wartość zwracaną dla
someTableAdapter.getSomeData()
.Ale nie dla:
źródło
Stara sztuczka sprzed dni .NET: Otwórz okno rejestrów i sprawdź wartość rejestru EAX. Zawiera wartość zwracaną przez ostatnią wywoływaną funkcję.
źródło
Wyjdź z metody go () za pomocą Shift-F11, a następnie w oknie debugowania „Autos” wyświetli wartość zwrotną wywołania metody, która właśnie wyskoczyła ze stosu (w tym przypadku metoda go (), która jest czego chcesz). To jest zachowanie w Visual Studio 2005; Nie korzystałem z programu Visual Studio 2008, więc nie wiem, czy zachowuje się tak samo w tej wersji.
źródło
Tak, jest bardzo fajny sposób. Istotną wadą jest to, że trzeba będzie czekać 5, może 6 lat. Ponieważ widzę, że napisałeś w listopadzie 2008 r., Sugeruję, abyś ...
... aaaait. I voila! Właśnie dla Ciebie MS wydał najnowszą wersję Visual Studio 2013, w której jest to domyślna funkcja dostępna z menu podczas pracy w trybie debugowania (menu Debugowanie → Windows → Automaty ).
źródło
Istnieje wiele obejść, ale żadne nie wydaje się zadowalające.
Cytując poniżej Johna Skeeta (skomentuj teraz usuniętą odpowiedź):
Teoretycznie debugger może mieć
return
zmienną. W końcu: to tylko zmienna na stosie:Rozważ to żądanie funkcji dla programu Visual Studio.
źródło
Chciałem rozwinąć odpowiedź PascalK na uruchomienie tej wersji w Visual Studio 2015, ponieważ istnieje ukryta funkcja, która nie jest udokumentowana w Zbadaj wartości zwrotne wywołań metod .
Jeśli zagnieżdżono wywołania funkcji, pseudo-zmienne
$ResultValueX
są tworzone automatycznie, gdzie X odnosi się do kolejności wywołań funkcji. Więc jeśli masz wywołanie takie jakMultiply(Five(), Six())
, tworzone są następujące pseudo-zmienne:źródło
Microsoft Visual C ++ kiedyś to robił, ale Visual Studio nie AFAIK .. :(
źródło
Jedyny sposób, jaki znam, to umieszczenie punktu przerwania w linii powrotnej, a następnie wywołanie okna szybkiego podglądu i wprowadzenie zwróconego wyrażenia:
Działa to jednak tylko wtedy, gdy wywołanie nie zmienia stanu żadnego obiektu (ponieważ nastąpi drugie wywołanie tej samej metody, kiedy wznowisz wykonywanie).
źródło
Możesz także poprosić o ocenę wartości w oknie pośrednim, jeśli nie ustawia flag lub innych zmiennych, a jedynie coś zwraca.
źródło
Myślę, że można to ustalić, patrząc na rejestr RAX w oknie rejestrów (debugowanie / Windows / rejestry). Po wyjściu (SHIFT + F11) z funkcji sprawdź rejestr RAX. Nie wiem na pewno, ale pewnego razu na Księżycu mogłeś sprawdzić rejestr (wcześniej .NET dni) i zobaczyć tam zwracaną wartość. Może to być nawet kombinacja RAX i RBX itp.
źródło
Otwarcie okna debugowania → autos spowoduje zamknięcie. Nie pokaże rzeczywistej wartości zwracanej, ale pokaże to, co zostało ocenione w instrukcji return.
źródło
return x + y;
Miałem na myśli to, że jeśli ustawisz punkt przerwania w tym wierszu, wówczas okno debugowania-autos wyświetli bieżące wartości dla xiy. Tak jak powiedziałem, tylko zbliżysz się. Po prostu próbuję być pomocny. Nie sądzę, że to zasługuje na opinię.Tak, przechodząc na VB.NET. ; P (Właśnie powiedziałeś „Visual Studio”.;)
Tak długo, jak pamiętam (od Visual Basic po wszystkie wersje VB.NET), możesz po prostu zapytać o nazwę funkcji. „Funkcjonuje” jak zmienna lokalna, która jest domyślnie zadeklarowana na początku funkcji, a jej bieżąca wartość jest również używana jako wartość zwracana za każdym razem, gdy funkcja kończy działanie za pomocą instrukcji instrukcji non-return (tj.
Exit Function
Lub po prostu spada) i oczywiście, gdy używana jest instrukcja return.Jest również ustawiony na wyrażenie instrukcji return. Podobnie jak zmienna lokalna, jej wartość można sprawdzić w dowolnym punkcie wykonania funkcji (w tym po wykonaniu instrukcji return). C # nie ma tego i powinien.
Ta mała funkcja VB.NET (plus
Exit Function
instrukcja, którą włącza - kolejna funkcja C # nie ma i nie powinna) jest bardzo przydatna w formie programowania obronnego , w którym ćwiczę, gdzie zawsze inicjuję nazwę funkcji na wartość błędu / wartości domyślnej jako pierwsze oświadczenie. Następnie w dowolnym punkcie awarii (który zwykle występuje znacznie częściej niż punkty sukcesu), mogę po prostu wywołaćExit Function
instrukcję (tj. Bez konieczności duplikowania wyrażenia niepowodzenia / domyślnego lub nawet nazwy stałej / zmiennej).źródło
Akceptowana odpowiedź nie działa poprawnie z Visual Studio 2015, ale umieszczając punkt przerwania w ostatnim wierszu metody i naciskając F10, umieści wszystkie wyrażenia wartości zwracanej w oknie lokalnych.
źródło
Możesz spróbować wybrać
"someTableAdapter.getSomeData();"
, kliknąć prawym przyciskiem myszy i przejść do szybkiego oglądania .źródło
Przeciągnij i upuść wyrażenie zwrotne w oknie zegarka.
Na przykład w zestawieniu
przeciągnij i upuść
w okienku zegarka, a zobaczysz wartość.
Możesz to zrobić dla dowolnego wyrażenia.
źródło