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.