Hi,
ich sitz vor einem böööösen Bug.
Ich habe eine
MDI-Anwendung. Wenn ich alle
MDI-Child Formulare schliesse, und ein bestimmtes Form 5x hintereinander öffne und sofort wieder schliesse, überschreibt beim 6. mal irgendetwas eine Speicherstelle, was an einer bestimmten Komponente in der TComponent-Hierarchie der Anwendung zu einer
Access Violation in der TComponent.Notification Methode führt. Das ganze tritt nur bei dem einen
MDI-Form auf, und auch nur dann, wenn ich vorher alle anderen
MDI-Forms schliesse. Ist auch nur ein anderes offen, so passiert das nicht. Das ganze Verhalten ist reproduzierbar, wenn auch ungeheuer seltsam anmutend.
Leider ist das Projekt sehr umfangreich (Ja, DeddyH, es ist ein Schlangentier
, so dass ich durch althergebrachtes Suchen den Fehler nicht finden kann. Das muss irgend ein seltsamer Seiteneffekt von irgend einem Fehler sein, den wir hier nach +1 Tag Aufwand zu Zweit nicht finden konnten.
Der Kollege kam nun auf die Idee, dass er damals mittels SoftIce einen Hardware-breakpoint gesetzt hatte, so dass die CPU den Prozess automatisch anhält, sobald eine bestimmte Speicherstelle gelesen und/oder beschrieben wird. SoftIce gibt es ja nicht mehr, deshalb haben wir jetzt einmal die Trial von Syser geholt. (Ich will so ein Feature direkt in Delphi!).
Deswegen jetzt die Frage: Wie können wir das mit Syser debuggen? Ich habe da zwei Probleme:
Syser benötigt nun pdb Symbole. Delphi hat eine Map-Datei und .rsm Symbole. Kann ich aus den Delphi-Symbolen irgendwie diese SDS-Dateien (Syser Debug Symbols) erzeugen? Syser könnte seine Symbole aus .PDB Dateien selber generieren. Also brauche ich entweder einen direkten Weg Delphi-Sybole -> Syser Symbole oder den Umweg über pdb's. Geht das? Wenn ja: Wie?
Wenn die Antwort: 'Gar nicht' lautet (wobei ich hoffe, dass es irgendwie geht), dann würde ich in Syser rein über die Adressen gehen und die Symbole im Delphi-Debugger auflösen lassen.
Dazu müsste ich nur wissen, wie ich Syser an einen laufenden Prozess anhängen kann. Die Hilfe schweigt sich leider aus, einen entsprechenden Menüpunkt habe ich auch nicht gefunden. Wie kann ich also analog zu Delphi einen laufenden Prozess mit Syser debuggen? Sobald ich die Speicheradresse habe, die den Schreibvorgang auslöst, so kann ich in Delphi ja wieder gucken welche Methode das ist.
Schonmal vielen Dank.