![]() |
Wie debugge ich eine Delphi-App mit Syser?
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. |
Re: Wie debugge ich eine Delphi-App mit Syser?
Gibt’s in deiner Delphi-Version kein:
|
Re: Wie debugge ich eine Delphi-App mit Syser?
Delphi 2009 ... Fenster ... kann es mit dem von Andreas Hausladen entdeckten Bug zusammenhängen?
![]() |
Re: Wie debugge ich eine Delphi-App mit Syser?
Hi Phoenix,
besteht denn keine Moeglichkeit, dass Unit, welches die 5 Forms aufruft, zu etrahieren und in einem Extra Programm mal zu testen? Ich glaube, mit SoftIce(bzw. Nachfolger) wird das net so einfach..habe mich da mal vor Jahren mit rumgeaergert (Hardwarebreakpoints). |
Re: Wie debugge ich eine Delphi-App mit Syser?
Nico: Doch hat es, probier ich gleich mal aus.
Daniel: Whoops. Ich vergass: Das projekt ist Delphi 2006 Kaktus: Nein. ;-) Das Projekt ist zu komplex um einen Teil zu extrahieren. |
Re: Wie debugge ich eine Delphi-App mit Syser?
Zitat:
Datenhaltepunkte sind (sinnvollerweise) nicht persistent. Du musst sie also in jeder Debugsitzung neu anlegen/aktivieren. |
Re: Wie debugge ich eine Delphi-App mit Syser?
Treffer! Haben den Fehler! :firejump:
Dank des Datenhaltepunktes haben wir die Stelle herausgefunden, an der dort die Mistdaten in die Komponente geschrieben wurde. Grund war ein harter Typecast (also nicht mittels as, sondern direkt gecastet) eines falschen Objektes auf eine (dort) nicht existente Vorfahrenklasse. Vielen Dank. Wieder eine Menge übers Debuggen gelernt gestern und heute ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz