piątek, marca 30, 2007

implementacja ping i tracert dla bibliotek dll

czemu system sie zawiesza? czemu aplikacja, ktora normalnie dziala, po kilqnastu dniach na serverze nagle przestaje funkcjonowac jak nalezy? czemu dany kompnent przestal odpowiadac? przewaznie wystarcza restart kompa - z jakis wzgledow, ktorys z komponentow zaleznych zostal przekonfigurowany/zastrzymany i w gaszczu powiazan pomiedzy bibliotekami nie jest sie w stanie dojsc czemu i jak. tak powstaje niedeterminizm. i dla tego najprostrza recepta jest restart - a na serwerze czesto nie mozna go wykonac az do weekendu.
a gdyby tak wszystkie biblioteki implementowaly cos aka DLL-ICMP ? tak, zeby mozna bylo wylasc polecenie commandlineowe do pliq uruchomieniowego a ten zaczyna wysylac pingi do bibliotek zaleznych tworzac mape powiazan. dzieki temu moznaby zlokalizowac komponent, ktory nieodpowiada i go zresetowac.
warunek - musialyby to implementowac *wszystkie* biblioteki.

byc moze ktos napisze, ze z podobnych narzedzi sie korzysta... te co widzialem byly 4developers only, a output jaki z siebie wypluwaly byl ciezki do zrozumienia nawet dla tworcy aplikacji. ale i tak swoja droga jestem ciekaw sie buduje mapy powiazan miedzy libami i chetnie sprawdzilbym jak to wyglada w ponoc uporzadkowanej vista...

2 komentarze:

mwd pisze...

Może i fajne by to było, tylko kompletnie nie da się tego zrobić. DLLki w windozie są tak porąbane, że nie da się określić mapy wywołań kolejnych bibliotek. Czemu? - Bo wywołania mogą się zapętlać; bo może istnieć kilka wersji jednej biblioteki; bo jedne są "managed" a inne nie; bo niektóre robią takie cyrki, że nawet napalony byś na to nie wpadł.

Utopia po prostu. W naszym świecie nie do osiągnięcia.

A jak mi tu ktoś wyjedzie z tekstem o DLLkach .Net które mogą być remedium na to, to niech się dwa razy zastanowi, bo jest taka masa "legacy code" w środowisku, i taka masa wrapperów na wrappery, że coś takiego jak "managed code" będzie miało rację bytu chyba tylko w innej rzeczywistości.

Anonimowy pisze...

Prostą mapę zależności dla jednej aplikacji da się zrobić - służy do tego Dependency walker znajdujący się w Visual C++.
Co do .Net-a to każda aplikacja jest instalowana ze swoimi własnymi dll-kami, i w odróżnieniu od Win32 te dll-ki są trzymane w folderze aplikacji.