|
DoS
|
 |
« : Marzec 13, 2010, 12:03:50 » |
|
Zapewne nie raz zdarzyło się każdemu podczas pisania aplikacji i późniejszego testowania, że program (czy to z przyczyn logicznych, czy jeszcze nie wyjaśnionych) wysypuje się w środku działania. Najczęściej kod nie jest w stanie posprzątać po sobie i zostawia czy to niedającą się zamknąć konsolę czy okienko. Sam w czasie pisanie tego postu posiadam na pasku zadań 3 niezamknięte konsole. Nie można ich zamknąć, procesu nie ma w menadżerze. Jedynym skutecznym sposobem jest reset komputera. Żeby naprawić błąd muszę często debugować program i prawie za każdym razem mam ten problem.
Moje pytanie brzmi: jak radzicie sobie z takimi niedogodnościami? Jakiś inteligentny kod, który zawsze i bezwzględnie usunie wszystkie wskaźniki? Może jakiś program do zabijania tych niesfornych pozostałości programu?
- Sfrustrowany Jacek
|
|
|
|
|
Zapisane
|
|
|
|
|
Kuba D.
|
 |
« Odpowiedz #1 : Marzec 13, 2010, 12:39:13 » |
|
Jak sobie radzimy ? To proste, piszemy programy, które się poprawnie zamykają  Jeśli program się wysypuje to znaczy, że coś jest z nim nie tak, jakaś niezainicjowana zmienna ( konfiguracja debug a release różni się w tym względzie), nieaktualny wskaźnik, przekroczenie zakresu jakiejś tablicy i radosne mazanie po pamięci, kilkukrotna destrukcja jakiegoś wskaźnika itp. Odnośnie wskaźników to można wykorzystać smart-pointery, odpada wiele problemów. Odnośnie tablic można wykorzystać jakieś gotowe ich implementacje w stylu wektora lub listy a dostep do ich elementów przez iteratory, zmienne zaś trzeba samemu inicjalizować ( np. przez przypisanie im zera).
|
|
|
|
|
Zapisane
|
|
|
|
|
DoS
|
 |
« Odpowiedz #2 : Marzec 13, 2010, 13:05:39 » |
|
Jak sobie radzimy ? To proste, piszemy programy, które się poprawnie zamykają  Ale to nie jest zawsze takie oczywiste, że program jest napisany prawidłowo. Czasami pojawiają się też czynniki zewnętrzne. Podczas pisania sekcji sieciowej np. nie przewidziałem tego, że pakiet może się spóźnić albo przyjść w złej kolejności. Nieobsługiwana sytuacja i BACH! I nie było tego w cale tak łatwo znaleźć. Albo biblioteka której przekazywałem wskaźnik swojego obiektu bez ostrzeżenia go usuwała po zakończeniu działania. I znów BACH podczas zwalniania zasobów, które nie doszło do końca. Właśnie chodzi mi o tego typu sytuacje, które się już zdarzyły i nic nie można zrobić. Czy w takim przypadku jestem skazany wyłącznie na restart komputera?
|
|
|
|
|
Zapisane
|
|
|
|
|
vashpan
|
 |
« Odpowiedz #3 : Marzec 13, 2010, 13:31:01 » |
|
Ale one musza byc w menedzerze zadan, szukaj procesow takich jak np. conhost.exe, cmd.exe... Jaki masz system ?
|
|
|
|
|
Zapisane
|
|
|
|
|
Kuba D.
|
 |
« Odpowiedz #4 : Marzec 13, 2010, 13:38:50 » |
|
Pierwszy akapit był żarcikiem, nie da się wszystkiego przewidzieć  Żeby pozabijać niesforne procesy które nie chcą się standardowo poddać musiałbyś się rozglądnąć za jakimś zaawansowanym menedżerem procesów.
|
|
|
|
|
Zapisane
|
|
|
|
|
DoS
|
 |
« Odpowiedz #5 : Marzec 13, 2010, 14:08:47 » |
|
Ale one musza byc w menedzerze zadan, szukaj procesow takich jak np. conhost.exe, cmd.exe... Jaki masz system ?
XP proffessional sp3. żadnych takich procesów nie znalazłem. Co może być interesujące to program widnieje w zakładce "aplikacje" ze stanem"uruchomiony". Gdy daje: przejdź do procesu, przenosi mnie do pierwszego od góry. EDIT: Żeby pozabijać niesforne procesy które nie chcą się standardowo poddać musiałbyś się rozglądnąć za jakimś zaawansowanym menedżerem procesów.
Już się właśnie rozglądam. Dzięki.
|
|
|
|
« Ostatnia zmiana: Marzec 13, 2010, 14:10:46 wysłane przez DoS »
|
Zapisane
|
|
|
|
|
vashpan
|
 |
« Odpowiedz #6 : Marzec 13, 2010, 14:34:07 » |
|
Stawiam wiec ze to jakies procesy-zoombie  Menedzer zadan raczej dziala dobrze, ale jezeli szukasz czegos naprawde fajnego to polecam Process Explorer - monitor systemu z prawdziwego zdarzenia Sproboj zrestartowac powloke Windows - explorer.exe, wystarczy zabic proces w manadzerze zadan i poprzez uruchom... odpalic go z powrotem ( w sumie nie pamietam czy sam sie nie zresatartuje ), moze to spowoduje ze te male gnojki zgina...  Ale tak naprawde to tylko polsrodki, trzeba zlikwidowac przyczyne, odpal po prostu swoja aplikacje pod debuggerem i zobacz co sie stanie...
|
|
|
|
« Ostatnia zmiana: Marzec 13, 2010, 14:36:56 wysłane przez vashpan »
|
Zapisane
|
|
|
|
|
Groshu
|
 |
« Odpowiedz #7 : Marzec 13, 2010, 14:38:42 » |
|
Stawiam wiec ze to jakies procesy-zoombie  Menedzer zadan raczej dziala dobrze, ale jezeli szukasz czegos naprawde fajnego to polecam Process Explorer - monitor systemu z prawdziwego zdarzenia Sproboj zrestartowac powloke Windows - explorer.exe, wystarczy zabic proces w manadzerze zadan i poprzez uruchom... odpalic go z powrotem ( w sumie nie pamietam czy sam sie nie zresatartuje ), moze to spowoduje ze te male gnojki zgina...  Nawet jak znikną z paska to i tak skradzionej pamięci to nie zwolni.
|
|
|
|
|
Zapisane
|
Umiejętności zawodowe: - wieloletnie doświadczenie w administrowaniu kontem na nk 
|
|
|
|
Xion
|
 |
« Odpowiedz #8 : Marzec 13, 2010, 15:06:32 » |
|
Ale to nie jest zawsze takie oczywiste, że program jest napisany prawidłowo. Czasami pojawiają się też czynniki zewnętrzne. Podczas pisania sekcji sieciowej np. nie przewidziałem tego, że pakiet może się spóźnić albo przyjść w złej kolejności. Nie wiem jak w tej sytuacji zachowuje się Windows, ale systemy Uniksowe nie ubijają od razu procesów, do których należą deskryptory socketów czekające na informacje zwrotne z protokołów sieciowych (czyli np. ACKi z TCP/IP). Da się to zachowanie wyłączyć (opcje typu "linger"), ale domyślnie jest właśnie takie. Więc nie zawsze "wiszący" jeszcze przez chwilę proces jest błędem. W ogólności przyczyn może być jednak mnóstwo, z kręcącą się bez sensu (bo bez okien) pętlą komunikatów na czele.
|
|
|
|
|
Zapisane
|
|
|
|
|
DoS
|
 |
« Odpowiedz #9 : Marzec 13, 2010, 15:18:50 » |
|
Niestety ani Process Explorer ani 2 inne nie pomogły w tym wypadku. Ubicie explorera windowsa też nie zlikwidowało problemu. Ale tak naprawde to tylko polsrodki, trzeba zlikwidowac przyczyne, odpal po prostu swoja aplikacje pod debuggerem i zobacz co sie stanie...
Debuguje ją, tylko najczęściej takiemu niedoświadczonemu koderowi jak mi nie zawsze wystarcza jedno odpalenie i likwiduje problem. Najczęściej prędzej kończy mi się pamięć.  A najgorsze są chyba moduły, które wcześniej działały dobrze ale gdy dodałem nową część to się sypią.  EDIT: W ogólności przyczyn może być jednak mnóstwo, z kręcącą się bez sensu (bo bez okien) pętlą komunikatów na czele.
U mnie akurat to nie zwolnienie ani biblioteki GUI ani poprawne wyjście, które windows uznałby za dobry moment do wyłączenia konsoli. 
|
|
|
|
« Ostatnia zmiana: Marzec 13, 2010, 15:21:36 wysłane przez DoS »
|
Zapisane
|
|
|
|
|