Einzelnen Beitrag anzeigen

Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#1

Wie debugge ich eine Delphi-App mit Syser?

  Alt 18. Nov 2008, 17:21
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat