Programowanie lokalnych aplikacji.net 2013/2014 Instrukcja pomocnicza Debugowanie procesów potomnych w Visual Studio 2012 Prowadzący: Tomasz Goluch Wersja: 3.0
I. Debugowanie procesów potomnych w Visual Studio 2012. Cel: Poznanie możliwości debugowania procesów potomnych uruchamianych w projekcie środowiska Visual Studio. W pierwszym kroku tworzymy projekt procesu potomnego. Utwórz nowy Console Application projekt ChildProcess (Visual C#). Uzupełnij metodę Main: Console.WriteLine("Czekanie na podczepienie debbugera do procesu"); Console.WriteLine("Po podłączeniu wciśnij dowolny klawisz"); Console.WriteLine("Tutaj postaw pułapkę"); if (args.length > 0) Console.WriteLine("Pierwszy parametr przekazany do procesu to: " + args[0]); else Console.WriteLine("Nie przekazano żadnego parametru do procesu"); Aby nie pisać skomplikowanych ścieżek dostępu do procesu potomnego, w projekcie głównym ustal dla obydwu projektów wspólny folder dla plików wykonywalnych: kliknij PPM na projekcie aplikacji Properties Build Output path: Browse przejdź do wspólnego katalogu Select folder Save Selected Items (Ctrl+S). Przebuduj projekt: (Ctrl + Alt + F7). W wybranym folderze powinien pojawić się plik wykonywalny *.exe. Dodaj nowy Console Application projekt MainProcess (Visual C#). Ustaw nowy projekt jako domylny: Project Set as StartUp Project. Dodaj przestrzeń nazw: System.Diagnostics oraz uzupełnij metodę Main: Process.Start("ChildProcess.exe", "Witaj"); Console.WriteLine("Aby zakończyć główny proces naciśnij dowolny przycisk."); Dodaj ścieżkę do wcześniej ustalonego, wspólnego folderu dla plików wykonywalnych: kliknij PPM na projekcie aplikacji Properties Build Output path: Browse wybrany w poprzednim projekcie, wspólny katalog Select folder Save Selected Items (Ctrl+S). Uruchom program główny (F5). Powinno to spowodować uruchomienie procesu potomnego. 2
Wybierz: Debug Attach to process wybierz proces potomny z listy aktywnych procesów w systemie. Zastaw pułapkę debuggera w procesie potomnym zgodnie z poniższym rysunkiem: Naciśnij dowolny klawisz w oknie konsoli aktywnego procesu potomnego. Pułapka debuggera powinna zostać trafiona i kod jest gotowy do analizowania. Inną metodą jest uruchomienie debuggera z kodu, dodaj w procesie potomnym przestrzeń nazw: System.Diagnostics oraz kod uruchamiający debuggera: Debugger.Launch(); Console.WriteLine("Czekanie na podczepienie debbugera do procesu"); Console.WriteLine("Po podłączeniu wciśnij dowolny klawisz"); Console.WriteLine("Tutaj postaw pułapkę"); if (args.length > 0) Console.WriteLine("Pierwszy parametr przekazany do procesu to: " + args[0]); else Console.WriteLine("Nie przekazano żadnego parametru do procesu"); Uruchom główny proces, powinno się zgłosić okno z propozycją uruchomienia debuggera: 3
Zatwierdź wybór programu przyciskiem Yes, powinno to spowodować uruchomienie nowej instancji Visual Studio gotowej do analizy kodu: Kolejne podejście mówi aby bezpośrednio z głównego procesu uruchamiać nową instancję Visual Studio w trybie debugowania procesu potomnego wraz z przekazanym parametrem. Zakomentuj bądź usuń wcześniej dodany kod uruchamiający debugger. //Debugger.Launch(); 4
W projekcie MainProcess zaktualizuj wywoanie metody Process.Start: Process.Start("C:/Program Files (x86)/microsoft Visual Studio 11.0/Common7/IDE/devenv.exe", "debugexe \"ChildProcess.exe\" \"Witaj\""); Console.WriteLine("Aby zakończyć główny proces naciśnij dowolny przycisk."); Aby rozpocząć analizę w nowo uruchomionej instancji Visual Studio należy nacisnąć (F10) spowoduje to wyświetlenie kodu procesu potomnego. Minusem dwóch ostatnich sposobów debugowania jest sytuacja kiedy w programie uruchamiamy dużą liczbę instancji jednego procesu dla każdego zostanie odpalone nowe środowisko Visual Studio. Kolejnym krokiem jest debugowanie przy pomocy IntelliTrace. Wymaga ono wersji Ultimate środowiska Visual studio. Włącz śledzenie historii wywołań : Debug IntelliTrace Open IntelliTrace Settings General: IntelliTrace events and call information oraz Advanced: Store IntelliTrace informations in this directory: (zapamiętaj katalog z informacjami IntelliTrace) OK. Należy zrestartować Visual studio. Znajdź i uruchom plik: childprocess_hhhhhhhh_hhhhhh_hhhhhh.itrace 1 Wybierz: Threads List Main Thread Start Debbuging. Po zakończeniu należy przywrócić domyślne ustawienia IntelliTrace, ponieważ śledzenie historii wywołań obniża wydajność środowiska. 1 Plik znajduje się w zapisanym katalogu, ciąg HHHHH to liczby heksalne. 5