Die Attendees von Lingo übergeben Daten über ihre Kommunikationskanäle und entweder kommt bei einer komplexen Konfiguration hinten das gewünschte Ergebnis raus oder aber auch nicht. Für den letzeren Fall ist der Debugger primär gedacht. Er kann an beliebige Stelle in den Datenstrom eingeschleust werden, um Schritt für Schritt zu schauen, durch welchen Attendee das Ergebnis verfälscht wird um so den Fehler einzugrenzen und schließlich zu lösen.
Der Debugger wird jedoch auch gerne für die Verfolgung der Verarbeitung am Bildschirm verwendet.
Achtung: Um Irritationen bei der Anwendung mehrerer Debugger zu vermeiden wird empfohlen, den Debugger in der Konfiguration immer unmittelbar nach dem Attendee zu platzieren, dessen Ausgabe debugt werden soll. Ansonsten kann es zu scheinbar unerklärlichen Interferrenzen bei der Ausgabe kommen.
Daten beliebigen Typs
Kursiv dargestellte Parameter sind optional (ggf. mit Angabe der Voreinstellung). Alle anderen Parameter müssen zwingend angegeben werden.
siehe allgemeine Beschreibung des Attendee
siehe allgemeine Beschreibung des Attendee
(Standard: true) Gibt eine Bedingung an, die erfüllt sein muss, damit ein Datenobjekt ausgegeben wird (siehe Beschreibung Objectfilter)
(Standard: true) Gibt eiune Bedingung an, die erfüllt sein muss, damit ein
Kommandoobjekt ausgegeben wird.
(Standard: ‘lex:) ’) Gibt an, mit welchem Prefix die Ausgabe versehen werden soll. Insbesondere wenn mit mehreren Debuggern gearbeitet wird, sollte dies genutzt werden.
Bei der Verarbeitung der oben angegebenen Funktionsbeschreibung des
Textwriters mit der Ablaufkonfiguration t1.cfg
meeting:
attendees:
- text_reader: { out: lines, files: '$(files)' }
- debugger: { in: lines, prompt: 'LINES:) ' }
- tokenizer: { in: lines, out: token }
- debugger: { in: token, prompt: 'TOKEN:) ' }
ergibt die Ausgabe
LINES:) *FILE('test.txt')
TOKEN:) *FILE('test.txt')
LINES:) "Der Debugger kann was."
TOKEN:) :Der/WORD:
TOKEN:) :Debugger/WORD:
TOKEN:) :kann/WORD:
TOKEN:) :was/WORD:
TOKEN:) :./PUNC:
TOKEN:) *EOL('test.txt')
LINES:) "Lingo auch :o)"
TOKEN:) :Lingo/WORD:
TOKEN:) :auch/WORD:
TOKEN:) ::/PUNC:
TOKEN:) :o/WORD:
TOKEN:) :)/OTHR:
TOKEN:) *EOL('test.txt')
LINES:) *EOF('test.txt')
TOKEN:) *EOF('test.txt')
# File lib/lingo/attendee/debugger.rb, line 97 def control(cmd, param) if cmd != STR_CMD_STATUS && eval(@cmd_eval) warn "#{@prompt} #{AgendaItem.new(cmd, param).inspect}" end end
# File lib/lingo/attendee/debugger.rb, line 91 def init @obj_eval = get_key('eval', 'true') @cmd_eval = get_key('ceval', 'true') @prompt = get_key('prompt', 'lex:) ') end
# File lib/lingo/attendee/debugger.rb, line 103 def process(obj) warn "#{@prompt} #{obj.inspect}" if eval(@obj_eval) forward(obj) end