Chyba najkrótsza definicja jaką widziałem:
> import Control.Monad.Fix
> fibs :: [Integer]
> fibs = fix ((0:) . scanl (+) 1)
Haskell FTW!
piątek, stycznia 30, 2009
środa, stycznia 07, 2009
Zabawy z Twitterem i GDB
Dzisiaj miałem potrzebę uruchomić serwer gry Killer Mud na debuggerze gdb: wczorajsze zmiany w kodzie spowodowały, że w ciągu doby serwer 3 razy się wywalił. Ponieważ chcę mieć możliwość debugowania kodu w przypadku jakichkolwiek problemów proces zostanie zamrożony. Sesja GDB uruchomiona jest spod screen'a, dzięki czemu nie muszę być zalogowany na serwerze by program mimo wszystko działał.
Tutaj jednak pojawia się problem: skąd mam wiedzieć, że program ciągle działa? Chciałbym dostawać jakieś powiadomienie w razie wystąpienia problemu. Poszperałem w paru źródłach, założyłem konto na Twitterze i ostatecznie stworzyłem taki oto plik .gdbinit:
Jak można się domyśleć, o zatrzymaniu muda wysyłane są powiadomienia na Twittera, podobnie o kontynuacji jego uruchomienia. Przy zatrzymaniu wysyłany jest także mail.
Stworzenie sesji jest dość proste:
Teraz robimy tylko "Ctrl-a d" i mamy działającą w tle sesję GDB.
Garść linków:
Tutaj jednak pojawia się problem: skąd mam wiedzieć, że program ciągle działa? Chciałbym dostawać jakieś powiadomienie w razie wystąpienia problemu. Poszperałem w paru źródłach, założyłem konto na Twitterze i ostatecznie stworzyłem taki oto plik .gdbinit:
define hook-run
set logging overwrite off
set logging file killer-gdb-log.txt
set logging on
end
define hook-stop
backtrace
shell rm -rf hook-stop-log.txt
shell tail -n 50 killer-gdb-log.txt >> hook-stop-log.txt
shell echo "----------------------" >> hook-stop-log.txt
shell tail -n 50 killer-run-log.txt >> hook-stop-log.txt
shell tar -czf killer-gdb-log.txt.tgz killer-gdb-log.txt
shell tar -czf killer-run-log.txt.tgz killer-run-log.txt
shell echo | mail -a killer-gdb-log.txt.tgz -a killer-run-log.txt.tgz -q "hook-stop-log.txt" -s "killer :: gdb :: hook-stop" ADRES@MAILOWY.COM
shell ~/tener/twidge update "killer :: gdb :: hook-stop"
end
define hook-continue
shell ~/tener/twidge update "killer :: gdb :: hook-continue"
end
Jak można się domyśleć, o zatrzymaniu muda wysyłane są powiadomienia na Twittera, podobnie o kontynuacji jego uruchomienia. Przy zatrzymaniu wysyłany jest także mail.
Stworzenie sesji jest dość proste:
screen
cd ~/mud/area
gdb ../src/rom
run 3000 >> killer-run-log.txt 2>&1
Teraz robimy tylko "Ctrl-a d" i mamy działającą w tle sesję GDB.
Garść linków:
- Screen: http://en.wikipedia.org/wiki/GNU_Screen
- GDB, manual: http://www.linuxtopia.org/online_books/redhat_linux_debugging_with_gdb/index.html
- Twitter: http://twitter.com
- Twidge, klient Twittera napisany w Haskellu: http://software.complete.org/software/projects/show/twidge
- moje konto na Twitterze: http://twitter.com/tener
- konto muda na Twitterze: http://twitter.com/killermud
Subskrybuj:
Posty (Atom)