Forum: Projekte & Code Post Mortem Dump für ruby


von Uhu U. (uhu)


Angehängte Dateien:

Lesenswert?

Was tun, wenn ein Ruby-Skript ohne Terminal-Anschluß abstürzt?

Ehe man irgendwelche Testausgaben einbaut und hofft, daß der Fehler 
irgendwann wieder auftritt, kann man das Programm mit einem Post Mortem 
Dump ausrüsten. Die Laufzeit-Kosten sind zwar nicht Null, aber auch 
nicht sehr groß.

So gehts:
1. Man fordert den Modul post_mortem_dump.rb an und aktiviert ihn:
1
require "post_mortem_dump.rb"
2
include Post_mortem_dump
3
enable_pmd(binding) if !Kernel.method_defined?(:debugger)
2. Man baut um den Aufruf des eigentlichen Codes einen Exception-Block:
1
begin
2
   main
3
rescue => detail
4
   set_trace_func nil
5
   post_mortem_dump("test.pmd", detail) if !Kernel.method_defined?(:debugger)
6
end
Stürzt das Skript ab, dann wird ein ausführlicher Speicherdump erzeugt.

1
post_mortem_dump.rb enthält den Code
2
test.rb             ist eine einfache Testumgebung
3
test.pmd            ist der Dump, der von test.rb erzeugt wird
Der Code ist bisher ausschließlich mit Ruby 1.8.7 getestet.

von Uhu U. (uhu)


Angehängte Dateien:

Lesenswert?

Hier noch eine gefixte und verfeinerte Version.
Änderungen:
+ Post_mortem_dump ist jetzt ein Namespace
+ es können viele Dumpfiles in einem Verzeichnis angelegt werden. Das
  ist über den dritten Parameter von Post_mortem_dump.dump abschaltbar
+ Angepaßter Test in test.rc

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.