Symbole

Symbole

  • Comments 1
  • Likes

Podczas, gdy dla programistów symbole są czymś oczywistym i niezbędnym do pracy, tak zwani profesjonaliści IT zazwyczaj nie wiedzą jak potężne narzędzie daje im Microsoft do dyspozycji. Tymczasem coś, co z założenia ma służyć programistom do śledzenia zachowań ich radosnej twórczości przydać się może każdemu, kto chciałby dowiedzieć się, co właściwie robi jego system operacyjny.
Z punktu widzenia programisty, symbole (pliki *.pdb) są opisem mówiącym, w którym miejscu kodu wykonywalnego (uznajmy dla uproszczenia, że pliku *.exe) znajduje się jaka funkcja. A gdybyśmy mieli coś takiego do plików w systemie Windows? Wtedy na przykład możnaby określić nie tylko, że wykorzystywana jest jakaś biblioteka dll, ale i dowiedzieć się, która funkcja z tej biblioteki jest wywoływana. Powiedzmy, że można bez tej wiedzy pracować z systemem, ale moje prywatne podejście jest takie, że zawsze lepiej coś wiedzieć niż nie wiedzieć. A przynajmniej móc sprawdzić.

Weźmy proste polecenie dir c:\ /s Co ono robi w środku? Przyjmijmy, że nie będziemy się znęcać nad Task Managerem, bo pokazanie, że nie ma on pojęcia o systemie nie jest specjalnie trudne. Wykonanie naszego dir w Task Manager objawi się zazwyczaj wyraźnym zwiększeniem obciążenia procesorów. Przez jaki proces? Myli się ten, kto stwierdzi, że przez cmd.exe W większości przypadków najciężej pracuje csrss.exe czyli Client Server Runtime Subsystem. Odpowiada on między innymi za wyświetlenie na ekranie wyników z cmd.exe, więc trudno się dziwić, że jest zajęty. Możemy go prosto odciążyć wpisując polecenie dir c:\ /s >nul czyli to samo co poprzednio, ale bez wyświetlania na ekranie. Od razu widać, że tym pracowitym jest cmd.exe Tyle, że nadal nie do końca wiadomo co tak naprawdę robi.

Tu na scenie pojawia się rewelacyjny program Process Explorer. W zasadzie, każdy poważny specjalista IT powinien go znać. Jeżeli nie, to bez żadnej złośliwości sugeruję: pobierz (bezpłatnie), pobaw się, poznaj choć część jego możliwości a potem wróć do niniejszego bloga.

Podczas wykonywania naszego polecenia dir c:\ /s widać, że pracuje jeden jedyny wątek z cmd.exe. Cmd tak ma, ale dzięki przyciskowi Stack, można zobaczyć co tam się w tym wątku dzieje. Ograniczmy się do samych odwołań wewnątrz cmd.exe.

symbols01

Co widać? Zasadniczo, że używanych funkcji jest kilkanaście i pochodzą z różnych miejsc w cmd.exe. Wiele więcej na razie nie możemy powiedzieć, mimo najszczerszych chęci. A gdybyśmy mieli symbole do cmd.exe, każdy tajemniczy numerek zostałby zmieniony na ładną nazwę funkcji, oczywiście pod warunkiem, że Microsoft dla danej funkcji postanowił się publicznie przyznać gdzie ona leży i czy w ogóle istnieje. Otóż postanowił! Praktycznie dla każdego elementu systemu symbole są opublikowane i nic tylko ich używać. To samo okienko od razu prezentuje się znacznie lepiej:

symbols02

Nie jest to poziom szczegółowości, który zachwyciłby programistę, ale dla administratora – to naprawdę wartościowe informacje. Można sobie pooglądać co dir robi w środku i wiedza ta niejednokrotnie bardzo się przydaje. Może dla polecenia dir stosunkowo rzadko, ale dla bardziej tajemniczych działań systemu Windows – już całkiem często.

Spodobały się symbole? Pora więc na szczegółowy przepis jak je sobie skonfigurować.

  • Zdobądź bibliotekę dbghelp.dll Uwaga! W c:\windows\system32 jest taki plik, ale on nie zadziała. Potrzebujesz pliku o tej samej nazwie, ale pochodzącego z bezpłatnych Debugging Tools for Windows.
  • Zrób miejsce (folder) na dysku na symbole. Ja używam c:\windows\symbols ale nie ma tu żadnej specjalnej reguły.
  • W programie Process Explorer wybierz Options -> Configure Symbols i ustaw ścieżkę do biblioteki dbghelp.dll, ścieżkę do symboli na dysku i URL serwera publikującego symbole w sieci Internet.
    symbols03

Gotowe!

Jako, że nie może być tak świetnie, żeby jakieś rozwiązanie miało same zalety, konfigurując symbole warto wiedzieć, że:

  • W czasie oglądania procesów trzeba mieć połączenie z Internetem, chyba że ktoś ściągnie sobie wszystkie symbole do użycia offline.
  • Pobieranie informacji o funkcjach musi chwile trwać. Zwykle to tylko parę sekund, ale widać pewne opóźnienia.
  • Jeżeli nie ma połączenia z serwerem, każde wyświetlenie informacji czeka na timeout. Wyświetlają się takie numerki jak były bez symboli, tylko duuużo wolniej.
  • Symbole zapamiętywane są w pamięci podręcznej na dysku, w podanej ścieżce. Ten folder rośnie w miarę używania symboli i po kilku miesiącach potrafi mieć kilkaset megabajtów. Jego zawartość można w każdej chwili usunąć i jak czegoś będzie brakować – ściągnie się samo. Warto jednak wiedzieć, że ten folder cały czas powolutku puchnie.

Pozostaje życzyć miłego monitorowania. A jeżeli kogoś nie satysfakcjonują dane z Process Explorera, nawet z symbolami – sugeruję dokładne przyjrzenie się wspomnianym wyżej Debugging Tools for Windows. Tam tylko fantazja i umiejętności są ograniczeniem, ale to zupełnie inny temat i niejedną książkę o nim napisano.

Autor: Grzegorz Tworek [MVP]

Comments
Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment