Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: pimpfling am 10.12.07 - 15:56:46
-
Hallo
Ich habe hier folgendes Phänomen:
Wenn ich meinen LS Agenten per Knopfdruck ausführe bekomme ich die folgenden zwei Fehlermeldungen.
Type mismatch on external name: LOTUSNOTESAGENT
und
Main: TERMINATE: Object variable not set
Wenn ich nun meinen Agenten im Debugger laufen lasse, funktioniert alles wunderbar und mein Agent läugt durch.
Der Agent läuft lokal und ich würde gerne die Stelle herausfinden bei der er abschmiert.
Gibt es noch einen Trick mit dem man den Debugger zum debuggen kriegt?
-
Man könnte ein Errorhandling einbauen z.B. mit dem Openlog (von http://www.openntf.org (http://www.openntf.org) )
Dies hilft sicher auch schon viel.
-
... bau am Anfang einen Option Explicit oder Option Declare ein - damit erhälst du beim Speichern bereits bestimmte Hinweise auf die Konsistenz deines Codes. Mit Fehlerhandling => On Error Goto ... - lässt sich auch einiges abfangen...
Wie ist dein Agent getriggert - Zeitgesteuert etc?
Eventuell kannst du Print-Statements ebenfalls Fehlern auf die Schliche kommen. Das Verhalten des Debuggers ist ab und zu wie von dir beschrieben - damit habe ich mich schon abgefunden. Manchmal hilft auch ein Recompile der Datenbank...
In deinem Fall lässt mich die erste Meldung an einen Recompile denken. Die zweite Meldung wird eine Folgemeldung im Zusammenhang mit der ersten Meldung sein...
Toni
-
WOW, ihr seid ja schneller als die Polizei erlaubt :)
Vielen Dank für die schnellen Antworten.
Ich werde das mal probieren und melde mich dann wieder.
-
Ich habe jetzt einmal recompiled --> ohne Fehlermeldung.
Ich habe jetzt Option Explizit am Anfang stehen --> keine Fehlermeldung.
Der Agent läuft dann später auf Knopfdruck.
-
ok, mit 100x print xxx habe ich die Stelle nun gefunden.
Vielen Dank für die Hilfe.
Jetzt gehts auch ohne Dbugger :)
Schönen Feierabend.
-
Hallo Stefan, kannst Du noch etwas mehr zu wahren Ursache sagen?
Fakt ist: Der Debugger muss sich aus spezifischen Gründen mehr "merken" als der Client. Das kann dazu führen, dass unter bestimmten Umständen (häufig ein Zusammenspiel von Frontend- und Backend-Objekten) im Client das Objekt bereits vernichtet ist, dem Debugger aber doch noch zur Verfügung steht. In wie weit das immer sinnvoll ist, mag ich hier nicht diskutieren, ich kann das auch nicht endgültig beurteilen.
Mit einem vernünftigen ErrorHandling hättest Du die Stelle aber eher gefunden. Sehr viel eher. Ich habe hier gerade für eine Woche einen "Lehrling" neben mir zu sitzen, und die erste Regel, die ich vermittelt habe: Keine Zeile Code ohne Option Declare ohne ErrorHandler. Ohne Ausnahme.
Bernhard
-
Zum Hintergrund:
Ich mußte einen Agenten 'entschlacken' und umändern.
Der war allerdings so unsauber programmiert das viele Variablen nicht gedimt/deklariert wurden.
Nachdem ich Option Declare am Anfang zu stehen hatte, spuckte der Designer auch erstmal ein paar Fehlermeldungen aus.
Nachdem bereinigen dieser Fehler, hatte ich aber immer noch das Problem das der Agent mit Debugger funktionierte und ohne nicht.
Mit den prints im Code habe ich mich dann durch den Code 'debuggen' können.