Autor Thema: Debug Assertion Failed  (Gelesen 2215 mal)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Debug Assertion Failed
« am: 04.02.09 - 22:26:40 »
Notes Client 7.0.2

Hat diese Fehlermeldung von Euch schon mal jemand gesehen? Aufgetreten ist dies in einer LotusScript-Routine, in der aus einer NotesDocumentCollection Dokumente in eine andere Datenbank verschiebt, dabei mögliche ResponseDocs in eine andere Collection aufnimmt und ebenfalls verschiebt. Jeweils nach erfolgreicher Verschiebung werden das Hauptdokument aus der Collection und die Dokumente der Collection der ResponseDocs dazu gelöscht.

Heute bin ich erstmals auf eine Datenbank gestossen, bei dem dieses Verfahren zu besagter Meldung führt - und erstmal völlig ratlos. Auch die Anzahl der Dokumente der Quell-Datenbank ist unauffällig - ca. 50.000, von denen ca. 10.000 in die Collection der Hauptdokumente fallen und ca. weitere 30.000 in zugehörige ResponseDocs.

Fällt jemanden von Euch dazu etwas ein? Vor allem: Warum verweist mich Notes auf die MS C++-Dokumentation? Da muss ich ja ganz, ganz tief etwas angekratzt haben  ;D

Bernhard


klaussal

  • Gast
Re: Debug Assertion Failed
« Antwort #1 am: 04.02.09 - 22:38:51 »
http://forum.fachinformatiker.de/c-compiler-ides-apis/35079-debug-assertion-failed.html

Sicher schon gelesen, oder ?

Auffällig ist diese Stelle:

Zitat
Wahrscheinlich ist auf dem PC eine andere/ältere Version der MDAC installiert.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Debug Assertion Failed
« Antwort #2 am: 04.02.09 - 22:51:48 »
Klaus, es handelt sich um einen LS-Agenten - damit passt das schon mal gar nicht. Laut Protokoll und durch Inaugenscheinnahme hat die Routine 31.807 Dokumente Dokumente bereits verschoben, bis sie auf die Schnauze gefallen ist.

Bernhard

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Debug Assertion Failed
« Antwort #3 am: 04.02.09 - 23:43:49 »
Bitte beachtet diesen Thread erstmal nicht mehr - ich brauche noch genauere Untersuchungen. Laut Log (der ErrorHandler meldete brav in das Log der DB die Zeile, in der es knallte) ist es ein rekursiver Aufruf zur Ermittlung der Antwortdokumente der Antwortdokumente. Ein erneuter Aufruf der Routine (mit den verbleibenden Daten, also auch dem "Schädling" - derzeit vermutlich - an erster Stelle) führt zum sofortigen Crash.
Derzeitige Vermutung: Ein (daten-)korruptes Dokument, das auf sich selbst auf sich selbst auf sich selbst ... verweist.

Ich berichte weiter! Vor allem brauche ich dafür eine Lösung, die rekursive Routinen in solchen Fällen vor dem Amoklauf bewahrt. Heute bin ich aber zu müde und habe vor allem morgen früh einen wichtigen Termin.

"Witzig" ist aber die Fehlermeldung. Ich werde das nach Lösung mal mit den Clients 5, 6 und 8 nachstellen - mal sehen, was dort passiert. Rekursion löst Stack Overflow aus - das ist soweit klar. Aber die Reaktion des Clients ...

Danke bis hierher für's Mitlesen. Ich berichte weiter.

Bernhard

Bernhard

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Debug Assertion Failed
« Antwort #4 am: 06.02.09 - 23:12:08 »
So, jetzt die Auflösung. Ich bin leider erst heute Nachmittag wieder dazu gekommen, das Problem abschliessend zu klären.

Meine These war schon richtig - ein $Ref-Value führte die rekursive Routine zur Verzweiflung. Meine Ahnung war, dass ein Response Document wieder auf das Hauptdokument verweist oder eine Response zur Response auf die erstere. Mein Respekt gilt Thomas Schulte, mit dem ich gestern in anderer Sache telefonierte und mit ihm auch diesen Fall diskutierte: Seine Idee, dass das Response Document auf genau sich selbst verwies, entsprach genau den Tatsachen.

Meine Routine prüft nun einerseits eben diesen Fall ab (UNID = $Ref) als auch (konfigurierbar) die erlaubte Tiefe des rekursiven Aufrufs (das ist ja alles kein Hexenwerk, und ich hätte zumindest letzteres schon längst in entsprechenden Verfahren eingebaut haben müssen).

Nun habe ich damit zwei neue Probleme:
1. Alle rekursiven Verfahren nachträglich entsprechend absichern, weil: Passieren kann sowas ja immer.
2. Ich muss die Ursache finden, wie dieser Fall überhaupt entstehen konnte. Die Anwendung, in der dieses "unmögliche" Antwortdokument entstanden ist, ist zu 100% von mir, und in die Entstehung von Antwortdokumenten dieser Art kann kein User eingreifen. Ein Dokument aus 55.000 ist in meinem Verständnis genau eines zu viel.

Bernhard

PS: Die Fehlermeldungen, die ein R5 oder R 8 (Standard bzw. Basic) liefert, mag ich nicht nachreichen - die Applikation ist schon umgebaut, und deswegen retour mag ich jetzt nicht  ;D Getestet hatte ich aber heute nochmal mit einem 6er (als versaubare Testumgebung). Mein ErrorHandler meldete vorab noch brav den stack overflow, und die Meldung des Clients empfand ich dann eigentlich sauberer als die des 7er (warum sollte ich mich mit dem Compiler beschäftigen, die der Hersteller meiner Middleware verwendet?)

Offline Pyewacket

  • Senior Mitglied
  • ****
  • Beiträge: 310
  • Geschlecht: Männlich
Re: Debug Assertion Failed
« Antwort #5 am: 09.02.09 - 11:46:18 »
Hallo Bernhard,

zum Thema Assertion gibts bei http://de.wikipedia.org/wiki/Assertion_(Informatik)
nähere Informationen. In den Innereien deines Clients wurde eine unplausible
Situation festgestellt und der Client zieht dann quasi die Notbremse.
Da der Client in C programmiert ist  verweist dann die Assertion failed Meldung
auf das Sourcemodul in dem die Situation auftritt.

Gruss
 Peter
ATOS.org - Feel the music!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz