![]() |
Breakpoint setzen versagt in Unit...; Delphi 6
Hallo,
ich hab schon was ähnliches über die Suche gesehen, aber das Thema wurde nicht erfolgreich behandelt. Ich möchte einen Breakpoint setzen, aber er mag mich nicht. Breakpoint(s) sollen in einer Unit (einem Thread) gesetzt werden, in der ganzen Unit gehen die Dinger nicht. In anderen Units gehn die Breaks. Auch in einem von der Unit aufgerufenen Fenster( besser : dessen Routinen) funzt es. Es ist auch die richtige Unit (statisch im Hauptprogramm) - die Unit hab ich gestern komplett umgestellt - gibt es sonst nicht auf dem Rechner. (Das Thema mit nicht funktionierenden Breaks hat ich schon mit eingebundenen DLLs). Der Thread ruft ein Fenster auf - das Fenster kommt und funktioniert (nicht so 100% - aber das schieb ich auf Fehler in der "neuen" Füllroutine...). Thread schreibt auch korrekt seine Ausführung in LogDatei. Ein bisserl Code :
Delphi-Quellcode:
Was mach ich falsch, was hab ich übersehen ? Möglicherweise eine Einstellung spezifisch für die Unit in der IDE ?
ThreadNeueAdresse.Execute;
var Messg : TMsg; nilpointer : pointer; ErrorInfo : TErrorInfo; bFertigMitFenster : boolean; nWindowsCount : integer; begin bFertigMitFenster := false; <- breakpoint hier geht nicht if MainHWND = 0 then begin ... exit end; PeekMessage(...); <- break auch hier geht nicht ... end; Gemacht hab ich: IDE-Neustart, Rechner Neustart, {$D-} im Projekt schon gesucht - auch "händisch". DCU-Datei schon gelöscht. Compiler macht auch keine Optimierung mehr. Was hab ich noch nicht gemacht : Code von gestern (vor den Änderungen) eingespielt . Gruss maanton |
Re: Breakpoint setzen versagt in Unit...; Delphi 6
wie heißt die unit?
hast du sie dem Projekt hinzugefügt? Hast du auch keine Unit die den gleichen Namen hat so das eventuell die andere genommen wurde? |
Re: Breakpoint setzen versagt in Unit...; Delphi 6
Dieses Verhalten hat mich auch an den Rand der Verzweifung gebracht. Ursache ist immer(!)
a) DCU gleichen Namens in einem anderen* Verzeichnis b) PAS gleichen Namens in einem anderen* Verzeichnis * Dieses andere Verzeichnis wird von Delphi beim Kompilieren früher gescannt, als die von dir sichtbare Datei. Stelle einfach sicher (wie der Sir schon gesagt hat), das es keine DCU bzw. PAS Datei auf der Platte gibt. Ich verwende einige blöde Tricks, wenn ich mir nicht ganz sicher bin: 1. Nach dem Kompilieren werden im IDE-Editor alle Zeilen mit so einem blauen Bupsel markiert. Wenn diese beim Starten des Programms NICHT verschwinden, scheidet a) aus. 2. Irgendwo in der Unit einen Syntaxfehler produzieren und Kompilieren. Wird der Fehler erkannt, scheidet b) aus. Sollte damit eigentlich funktionieren. Sehr lustig sind auc Effekte, wo die Zeileninformation nicht mehr stimmt, dann werden 'Var'-Zeilen plötzlich zu Programmzeilen und Programmfehler werden z.B. hier angezeigt:
Delphi-Quellcode:
End;
// hier tritt der Fehler auf, hö hö Procedure FooBar; |
Re: Breakpoint setzen versagt in Unit...; Delphi 6
Hast du schonmal Umschalt+F9 verwendet? = Alles neu kompilieren.
Es kann auch sein, dass es ein Package (bpl) gibt, worin diese Unit enthalten ist. Dann geht die Arbeit aber auch schon richtig lost. Schau mal in den Projektoptionen, ob dort ungewöhnliche Pakete drin sind. |
Re: Breakpoint setzen versagt in Unit...; Delphi 6
projektoption "debug dcu" eingeschaltet?
|
Re: Breakpoint setzen versagt in Unit...; Delphi 6
Hallo !
- also : Die Unit heisst ThreadNeueAdresse.pas - Die Unit - auch die Source - gibt es nur einmal auf dem Rechner (spez. Entwicklungsrechner nur für dieses Projekt, keine Backups) - Das Löschen der DCU-DAtei führte zu einer Neuerstellung der DCU (Datum,Uhrzeit passt) - ist also wohl die Richtige - Bei der Neueingabe von Routinen hattte ich -erwartete- FEhlermeldungen beim Kompilieren - Das Debuggen in der Unit hat schon mal funktioniert; ist aber schon länger her und ich meine was danach in den Projekteinstellungen geändert zu haben - aber was ? - debug dcu ist eingeschaltet - wie schon gesagt, die anderen Units gehn... Meine aktuelle Vermutung ist, dass die Unit im Projekt nicht richtig (oder mehrfach) angemeldet ist. Werde daher das Projekt neu aufsetzen. Könnte sein, dass ich als Neueinsteiger damals (bei Projektübernahme) dort falsche Einstellungen vorgenommen habe. Melde mich, wenn damit durch ... . Gruss und ein schoenes Rest WE maanton |
Re: Breakpoint setzen versagt in Unit...; Delphi 6
Hallo !
Und hier die Auflösung des Preisrätsels :wall: : In der Interface-Sektion ist eine Recordliste nit DB-Felddaten definiert :
Delphi-Quellcode:
Diese Recordtabelle dient zur Steuerung der Ausleseroutinen, Darstellungsroutinen, Userrechte, ... . Es sind also alle Infos dadrin verpackt, die man Feldspezifisch, Componentspezifisch,... so braucht ... . Einzelfelder des Records (z.B. LabelText) wurden als shortstring deklariert. Daher ist der Speicherbedarf des ganzen Blockes (bei 41 Elementen) ziemlich gross (> 64K);
NA_LADETABELLE : array [0..40] of TDBFeldInfoRecord = (
( FeldName : 'VORNAME'; FeldTyp : 'ZEICHEN'; ... Editierbar : FALSE; Angezeigt : TRUE; ... LabelName : 'LPRENAME'; LabelText : '&Vorname : ' ),( FeldName : 'NAME'; FeldTyp : 'ZEICHEN'; ... ),( ... ), ... ); Was also in einer anderen Unit mit 22 Elementen noch funktioniert hat (also das Setzen von Breakpoints) funzte bei 41 Elementen nicht mehr. Es spielt dabei (wohl) keine Rolle (habs nicht ausprobiert) , ob man mehrere Konstantendeklarationen hat die dann in Summe 64K überschreiten). Verkürzung der String-Deklarationen via string[10] bzw. string[100] brachte das gewünschte Resultat :-D . Vielen Dank für die Unterstützung maanton |
Re: Breakpoint setzen versagt in Unit...; Delphi 6
Wieder was dazu gelernt.
|
AW: Re: Breakpoint setzen versagt in Unit...; Delphi 6
Zitat:
Zur Zeit quäle ich mich mit den Units der Langzahlenbibliothek "NX" von Marcel Martin. Weder Delphi4 noch Delphi 5 ist in der Lage, irgendwelche potentiellen Breakpoints in den betreffenden Units anzuzeigen, geschweige denn, welche zu setzen oder gar bei diesen zu stoppen. Dabei wird Code dort eindeutig ausgeführt (kann man z.B. mit kleinen Pieptönen überprüfen, Initialisationscode wird ohnehin immer ausgeführt), auch dort finden sich keine). Bei anderen eingebundenen "externen" Units im gleichen Projekt finden sich die blauen Punkte hingegen. Namensdoubletten waren tatsächlich vorhanden, doch die sind längst gelöscht, Delphi längst neu gestartet... Mit Delphi erlebt man zwar im Verlaufe der Jahre auch so manches Abenteuer, aber einen solch brachialen Fehler dieser Programmierumgebung habe ich bisher noch nie erlebt. |
AW: Breakpoint setzen versagt in Unit...; Delphi 6
Hast du die ganzen Dateien wie .identcache und so schon gelöscht? Die verursachen das ganz gerne... also im Grunde alles bis auf (bei Delphi 5) .dpr, .res, .pas und .dfm bei normalen Projekten mit nur Projekt + Formulare.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:10 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