Symbole

Podczas, gdy dla programistów symbole sa czyms oczywistym i niezbednym do pracy, tak zwani profesjonalisci IT zazwyczaj nie wiedza jak potezne narzedzie daje im Microsoft do dyspozycji. Tymczasem cos, co z zalozenia ma sluzyc programistom do sledzenia zachowan ich radosnej twórczosci przydac sie moze kazdemu, kto chcialby dowiedziec sie, co wlasciwie robi jego system operacyjny.
Z punktu widzenia programisty, symbole (pliki *.pdb) sa opisem mówiacym, w którym miejscu kodu wykonywalnego (uznajmy dla uproszczenia, ze pliku *.exe) znajduje sie jaka funkcja. A gdybysmy mieli cos takiego do plików w systemie Windows? Wtedy na przyklad moznaby okreslic nie tylko, ze wykorzystywana jest jakas biblioteka dll, ale i dowiedziec sie, która funkcja z tej biblioteki jest wywolywana. Powiedzmy, ze mozna bez tej wiedzy pracowac z systemem, ale moje prywatne podejscie jest takie, ze zawsze lepiej cos wiedziec niz nie wiedziec. A przynajmniej móc sprawdzic.

Wezmy proste polecenie dir c:\ /s Co ono robi w srodku? Przyjmijmy, ze nie bedziemy sie znecac nad Task Managerem, bo pokazanie, ze nie ma on pojecia o systemie nie jest specjalnie trudne. Wykonanie naszego dir w Task Manager objawi sie zazwyczaj wyraznym zwiekszeniem obciazenia procesorów. Przez jaki proces? Myli sie ten, kto stwierdzi, ze przez cmd.exe W wiekszosci przypadków najciezej pracuje csrss.exe czyli Client Server Runtime Subsystem. Odpowiada on miedzy innymi za wyswietlenie na ekranie wyników z cmd.exe, wiec trudno sie dziwic, ze jest zajety. Mozemy go prosto odciazyc wpisujac polecenie dir c:\ /s >nul czyli to samo co poprzednio, ale bez wyswietlania na ekranie. Od razu widac, ze tym pracowitym jest cmd.exe Tyle, ze nadal nie do konca wiadomo co tak naprawde robi.

Tu na scenie pojawia sie rewelacyjny program Process Explorer. W zasadzie, kazdy powazny specjalista IT powinien go znac. Jezeli nie, to bez zadnej zlosliwosci sugeruje: pobierz (bezplatnie), pobaw sie, poznaj choc czesc jego mozliwosci a potem wróc do niniejszego bloga.

Podczas wykonywania naszego polecenia dir c:\ /s widac, ze pracuje jeden jedyny watek z cmd.exe. Cmd tak ma, ale dzieki przyciskowi Stack, mozna zobaczyc co tam sie w tym watku dzieje. Ograniczmy sie do samych odwolan wewnatrz cmd.exe.

symbols01

Co widac? Zasadniczo, ze uzywanych funkcji jest kilkanascie i pochodza z róznych miejsc w cmd.exe. Wiele wiecej na razie nie mozemy powiedziec, mimo najszczerszych checi. A gdybysmy mieli symbole do cmd.exe, kazdy tajemniczy numerek zostalby zmieniony na ladna nazwe funkcji, oczywiscie pod warunkiem, ze Microsoft dla danej funkcji postanowil sie publicznie przyznac gdzie ona lezy i czy w ogóle istnieje. Otóz postanowil! Praktycznie dla kazdego elementu systemu symbole sa opublikowane i nic tylko ich uzywac. To samo okienko od razu prezentuje sie znacznie lepiej:

symbols02

Nie jest to poziom szczególowosci, który zachwycilby programiste, ale dla administratora – to naprawde wartosciowe informacje. Mozna sobie poogladac co dir robi w srodku i wiedza ta niejednokrotnie bardzo sie przydaje. Moze dla polecenia dir stosunkowo rzadko, ale dla bardziej tajemniczych dzialan systemu Windows – juz calkiem czesto.

Spodobaly sie symbole? Pora wiec na szczególowy przepis jak je sobie skonfigurowac.

  • Zdobadz biblioteke dbghelp.dll Uwaga! W c:\windows\system32 jest taki plik, ale on nie zadziala. Potrzebujesz pliku o tej samej nazwie, ale pochodzacego z bezplatnych Debugging Tools for Windows.
  • Zrób miejsce (folder) na dysku na symbole. Ja uzywam c:\windows\symbols ale nie ma tu zadnej specjalnej reguly.
  • W programie Process Explorer wybierz Options -> Configure Symbols i ustaw sciezke do biblioteki dbghelp.dll, sciezke do symboli na dysku i URL serwera publikujacego symbole w sieci Internet.
    symbols03

Gotowe!

Jako, ze nie moze byc tak swietnie, zeby jakies rozwiazanie mialo same zalety, konfigurujac symbole warto wiedziec, ze:

  • W czasie ogladania procesów trzeba miec polaczenie z Internetem, chyba ze ktos sciagnie sobie wszystkie symbole do uzycia offline.
  • Pobieranie informacji o funkcjach musi chwile trwac. Zwykle to tylko pare sekund, ale widac pewne opóznienia.
  • Jezeli nie ma polaczenia z serwerem, kazde wyswietlenie informacji czeka na timeout. Wyswietlaja sie takie numerki jak byly bez symboli, tylko duuuzo wolniej.
  • Symbole zapamietywane sa w pamieci podrecznej na dysku, w podanej sciezce. Ten folder rosnie w miare uzywania symboli i po kilku miesiacach potrafi miec kilkaset megabajtów. Jego zawartosc mozna w kazdej chwili usunac i jak czegos bedzie brakowac – sciagnie sie samo. Warto jednak wiedziec, ze ten folder caly czas powolutku puchnie.

Pozostaje zyczyc milego monitorowania. A jezeli kogos nie satysfakcjonuja dane z Process Explorera, nawet z symbolami – sugeruje dokladne przyjrzenie sie wspomnianym wyzej Debugging Tools for Windows. Tam tylko fantazja i umiejetnosci sa ograniczeniem, ale to zupelnie inny temat i niejedna ksiazke o nim napisano.

Autor: Grzegorz Tworek [MVP]