Czasem zwykłe metody debugowania nie wystarczają, czasem watch-e i sprawdzanie krok po kroku jest nie wystarczające. Czasem chciało by się sprawdzić wartość obiektu, do którego nie mamy referencji. No właśnie, wszystkie normalne narzędzia debuggowania jakie udostęnia Visual Studio pozwalają na oglądanie wszystkiego co mamy w zasięgu referencji albo gdzieś po callstack-u możemy się do “tego” dorwać. Co jednak jeśli i to za mało? Na pomoc Make Object ID. Zatrzymując program w momencie gdy ma...
Ostatnio widzę dużo wpisów na temat debugowania aplikacji. Nie trafiłem jednak na opis dwóch rzeczy, które bardzo tą czynność ułatwiają, mianowicie, zmiana kolejności wykonywania kodu oraz GetHashCode()Zmiana kolejności wykonywania kodu Czy zdarzyło Ci się podczas debugowania przejechać o tą jedną linijkę za daleko? Nic prostszego, chwyć żółtą strzałkę i przesuń kilka linijek do tyłu i wykonaj kod jeszcze raz. To jest tak proste, że aż niebywałe, że niektórzy o tym nie wiedzą. Teraz już w...
Tematyka uruchamiania i debugowania aplikacji Windows 8 na zdalnym urządzeniu nie jest nowa. Niemniej jednak postanowiłem zrobić małe podsumowanie na ten temat przy okazji ukazania się finalnej wersji Windows 8. How to Create Windows 8 Bootable USB Device from ISO Image using WinUSB Maker. Mając bootowalne USB, ustawiamy w BIOS-ie kolejność bootowania, tak by pierwszym urządzeniem był nasz pendrive (przez USB podłączamy wcześniej klawiaturę). Minimalna rozdzielczość dla aplikacji Metro w Windows 8 to ...
2lis/110Debugowanie Visual Studio Dziś postaram się przybliżyć rzadko stosowaną technikę wyszukiwania błędów w kodzie. Polega ona na użycia drugiej instancji Visual Studio do znalezienia błędów w pierwszej. Patrząc na ostatnie zdanie można zacząć się zastanawiać jak szukanie błędów w Visual Studio może pomóc w znalezieniu błędów w naszym programie. Należy zdać sobie sprawę, że tak naprawdę Visual Studio zawiera w sobie nasz kod. I naszym celem jest prześledzenie działania tego kodu. Sztandarowym przykład...
Istnieje kilka podejść do debugowania usług systemowych. Jeśli chcemy debugować już uruchomioną usługę to możemy skorzystać z opcji Attach to process.... Sprawa jest trudniejsza jeśli chcemy podłączyć się do usługi w momencie jej uruchamiania. W takim wypadku można w kodzie usługi wywołać metodę Debugger.Brake. Są też inne sposoby, na przykład sztuczne opóźnienie startu usługi, tak aby zdążyć się do niej podpiąć. Ostatnio poznałem nowe, bardzo ciekawe podejście. Polega ono na stwor...
W poprzedniej notce opisałem technikę pozwalającą na debuggowanie dynamic assemblies przy wykorzystaniu najnowszej wersji biblioteki sosex w ramach WinDbg. Tym razem sprawdzimy skuteczność tej metody w odniesieniu do SQL-CLR. Nieco przydługawy, ale konieczny wstęp CLR pojawił się w SQL Serverze w wersji 2005 i pozostał w nim na dobre. Dzięki jego obecności można pisać triggery, procedury składowane, funkcje, agregaty oraz własne typy danych definiowane przez użytkownika i korzystać z nich w podobny sposó...
autor: Jakiś czas temu pracując z IntelliTrace próbowałem zdefiniować zdarzenie diagnostyczne dla pewnej metody. Dla ustalenia uwagi niech jej sygnatura wygląda tak, jak poniżej. string Flip(string s) Moim celem było, aby opis zdarzenia zawierał wynik zwrócony przez metodę oraz wartość argumentu s. Inaczej mówiąc, aby w oknie IntelliTrace Events View w Visual Studio 2010 zdarzenie zarejestowane dla wywołania metody z argumentem s="Hello" i wynikiem "olleH" wyglądalo tak: "olleH" Flip("Hello") O defin...
autor: Swego czasu w postach Własne zdarzenia IntelliTrace! oraz Własne zdarzenia IntelliTrace 2 opisałem jak zmodyfikować plik CollectionPlan.xml zawierający plan działania IntelliTrace (historycznego debuggera) tak, aby zdefiniować swoje własne zdarzenie IntelliTrace (ważny punkt w historii działania programu kiedy IntelliTrace nagrywa stan aplikacji). Ostatnio wróciłem do tego zagadnienia i "bawię się" testując różne możliwości IntelliTrace. Niestety czasami, po zmodyfikowaniu pliku Collect...
ServicedComponent to klasa umożliwiająca tworzenie zarządzanych komponentów/klas, które mogą być użyte w aplikacjach COM+ oraz mogą korzystać z usług COM+. Jedną z takich usług jest na przykład pula obiektów, czyli coś podobnego do puli połączeń z tą różnicą, że możemy w niej umieścić instancje naszej własnej klasy. Aby stworzyć taką specjalną klasę należy wydziedziczyć ją ze wspomnianej klasy ServicedComponent. Do tej pory nie miałem okazji z niej korzystać, dlatego napotkałem ...
autor: Skoro pisałem już o: - plikach symboli; - serwerze symboli to nadszedł najwyższy czas, aby zmierzyć się z plikami źródłowymi, domykając tym samym mini serię. Informacja o pliku źródłowym, na podstawie którego został wygenerowany plik z symbolami to nie tylko ścieżki do plików źródłowych, o których pisałem we wcześniejszej notce. Najważniejsze dane zapisane są w strumieniu srcsrv w ramach pliku .pdb i stanowią dla debuggera wskazówkę jak znaleźć odpowiedni plik źródłowy. Pomocne przy wypełnianiu t...
Autor: Jakiś czas temu Tomek Wiśniewski na swoim blogu opisał (Debugger Canvas – nowe spojrzenie na ”odrobaczanie”) ciekawy dodatek do Visual Studio a mianowicie Debugger Canvas. Ponieważ lubię wszelkie rzeczy związane z “ odrobaczaniem” postanowiłem się trochę przyjrzeć mu bliżej. W tym wpisie chciałbym pokazać trochę dodatkowych “smaczków”, które są udostępnione za pomocą Debugger Canvas. Tak więc co dodatkowego posiada Debugger Canvas prócz tego co opisał Tomek? Na każdym z “bąbli” (wolę to określeni...
Przez długi czas nic nie pisałem ze względu na pracę, teraz ponownie postaram się ożywić bloga i wrzucić parę wartościowych postów. Niedawno odkryłem, że ASP.NET Development Server (“Cassini”) ma poważne ograniczenie - nie obsługuje SSL. Nie obsługuje także URL Rewriting Rules, Custom Security Settings i innych “bogatszych” cech oferowany w IIS 7. Z jego plusów można wymienić:“lekkość”, bezpieczeństwo - tylko żądania lokalnie (intranet odpada), nie potrzebuje konta administratora, nie potrzeba go instalo...
Typowa, prosta klasa Person. Cztery propercje i konstruktor. Gdy w dowolnym miejscu programu zostanie utworzona instancja klasy Person, a następnie debuggerem zatrzyma się wykonywanie kodu, można sprawdzić stan naszego obiektu. Nagłówek obiektu wyświetla nazwę klasy, a jego rozwinięcie wyświetli poszczególne składowe i ich wartości. Podobny efekt jest widoczny jeśli utworzy się kolekcję obiektów P...
Dziś kolejne, mam nadzieję, ciekawe zastosowanie warunkowego breakpointu. Zanim jednak przejdziemy do omawiania nakreślmy naszą sytuację wyjściową. Załóżmy, że mamy kawałek kodu aplikacji, który jest dość często wykorzystywany z różnych miejsc. privatevoid Calculate(paramsint[] coefficients) { //do sth with coeffs Array.ForEach(coefficients, Console.WriteLine); } To co on robi nie jest ważne. Istotne jest, że chcielibyśmy postawić w niej breakpoint’a i zobaczyć jak się zachowuje w pewnych syt...
Zapewne wszyscy zdają sobie sprawę, że nasz breakpoint możemy uczynić warunkowym tak aby VS zatrzymało się na nim tylko w specyficznej sytuacji a nie za każdym razem. Gdy breakpoint jest warunkowy jego ikona posiada mały biały plusik tak jak na obrazku w tym paragrafie abyśmy mogli odróżnić go od innych. Dziś pokażemy sobie, że warunkowy breakpoint może być użyty także do innych, mniej oczywistych (mam nadzieję) celów. Załóżmy, że jesteśmy w trakcie debuggowania dość skomplikowanego kodu (ten poniżej tak...
Autor: Ostatnio na forum portalu CodeGuru.pl brałem udział w dyskusji na temat metod prostego debugowania kodu T-SQL z wykorzystaniem polecenia PRINT. W wątku użytkownik szogun.krepa podał metodę obejścia problemu z poleceniem PRINT, które wysyła komunikat informacyjny (w przypadku aplikacji SQL Server Management Studio komunikat ten pojawia się w zakładce Messages) z o...
Bazy danych i XML 5157 dni, 8 godzin temu 62 źrodło rozwiń
Autor: Wczoraj wieczorem przysiadłem chwilę i poszperałem w sieci co trzeba zrobić, by debugger Visuala ładnie „wyświetlał” obiekty naszych klas(np. po najechaniu na niego myszką, w okienku Watch). Gdy jeszcze moim głównym językiem był C++ też zapragnąłem mieć coś takiego. Niestety, w przypadku programowania natywnego nie ...
Debugowanie jest procesem niezwykle złożonym. Istnieją publikacje opisujące techniczne aspekty wyszukiwania błędów w kodzie w ten właśnie sposób. Czasami warto jednak zapoznać się z jakimś zagadnieniem w oderwaniu się od konkretnej technologii. Taką właśnie pozycją jest Debugowanie. Jak wyszukiwać i naprawiać błędy w kodzie oraz im zapobiegać (oryg. Debug It!: Find, Repair, and Prevent Bugs in Your Code). Książka nie jest opisem jakiegoś narzędzia wspomagającego debugowanie, platformy uruchomieniowej cz...
Autor: Czasami, gdy próbuję zdebugować jakiś uciążliwy problem istnieje konieczność oglądania właściwości obiektu. Klikanie kolejnych plusików w wizualizacji debuggera w poszukiwaniu odpowiedniego obiektu na liście doprowadza mnie do szału (zwłaszcza, gdy klasy są dziedziczone). Przy przeglądaniu namespace’a System.Diagnostics natknąłem się na atrybut: DebuggerDisplay. Krótka lektura MSDN i okazało się, że taka mała głupota może niesamowicie ułatwić życi...
Fullscreen’a, aż tak często nie używam, ale czasem się zdarza i rzeczywiście zachowanie to jest denerwujące. Tak więc postanowiłem coś z tym zrobić i napisać małego AddIn’a do VS, który będzie za to odpowiedzialny....