21. marts 2007 - 23:29Der er
12 kommentarer og 2 løsninger
Disabled breakpoints når der debugges
I mit program er der i hver forms unit en procedure med følgende opbygning:
function Open(aOwner : TComponent; ... ) : boolean; begin MyForm := TMyForm.Create(aOwner); try result := MyForm.ShowModal = mrOK; finally MyForm.Release; end; end;
I et af mine units er der smækket en WPTools RichEdit-komponent på formen. Dertil mange andre komponenter. Formen har events OnCreate og OnShow tildelt, men sætter jeg breakpoints i disse, bliver de grønne (disabled) når jeg kører programmet. Formen vises fint men koden i metoderne bliver ikke afviklet (bl.a. er den globale måleenhed stadig euInch hvor den sættes til euCm i OnCreate-metoden).
Hvordan kan det være at en OnCreate ikke kaldes? Der er ingen constructors der overrider TForms (formen nedarver derfra)
a_nor: det ændrer intet - heldigvis, for jeg har flyttet en masse kode fra Open-funktionerne over i formenes OnCreate og OnDestroy - og der virker det heldigvis.
Det er i øvrigt mere underligt idet det ikke bare er OnCreate og OnShow som debuggeren ikke kommer ind i. Den kommer gudhjælpemig heller ikke ind i Open-funktionen; men formen vises alligevel.
Har prøvet at omdøbe Open til et, for programmet, unikt navn. Delphi vil ikke oversætte før alle kald til Open er blevet omdøbt. Stadig kommer debuggeren ikke ind i funktionen.
Hvilken version af Delphi kører du med? Jeg prøvede din struktur i min gamle D3, og der gav min ændring, det ønskede resultat. Jeg kan ikke sige dig hvorfor. Har ikke testet i min D7.1
Det er (vistnok) kun den ene. Når jeg stepper into (<F7>) fra kaldet i en anden form (WordProcessorUnit.OpenThis(self,1,true);), så ender jeg et helt andet sted, nemlig i initialiseringsdelen på en 3-ie parts ToolBar-tingest. Hvordan det kan ske uden overhovedet at komme til min Open-funktion, det ved jeg ikke. Der er ingen initialization-del der eventuelt kunne gøre dette, ej heller er formen auto-kreeret.
I den !&%"¤#&!" ToolBar-tingest kommer der nu en exception (før har den måske været undertrykket, ved det ikke). Det undrer mig bare at exceptionen kommer før jeg end er nået til Open-funktionen. Det undrer mig også, at Delphi åbenbart kan hitte ud af at den ikke skal generere OnCreate, OnShow koden.
Bliver nok nødt til at lave det kæmpe arbejde at bytte komponenten ud med Delphi's egen. Er i øvrigt også tudegrim!
Kan ikke slette den globale variabel da den refereres til i andre forme (ikke min opfindelse!). Jeg lavede en lokal variabel i Open som jeg oprettede og bagefter tildelte den globale. Grimt, men den globale skal initialiseres.
Ja problemet må nok ligge et andet sted. Prøvede at teste igen og kan nu slet ikke genfremkalde problemet. Har nok fumlet med nogle compilerdirektiver, og så ikke været helt klar i knolden "i morges" :-)
Nå, ja - en virtuel kvajebajer er vel næsten på sin plads. I denne "!#!" fil der viser sig at være kopieret fra et WPTools-eksempel spottede jeg pludselig en {$FIL.inc} - og deri var bl.a. et {$d-} og så kan man jo ikke debugge ned i filen.
øv, øv
Det undrede mig meget, at GlobalValueUnit := euCm blev sat i constructoren. Nedenfor denne tildeling var et uskyldigt udseende kald til en metode der viste sig at sætte enheden tilbage til tommer.
a_nor: Smid et svar selvom du ikke direkte løste gåden. Dit brug af ordet "compilerdirektiv" satte mig på sporet. Du får halvdelen, OK?
hrc >>> HAR intet med AI at gøre, det er bare alm god kode skik at ryde lidt op, og når det er blevet så slemt at delphi ikke kan finde rundt, så er det på høje tid. det var bare det jeg sagde, som et forsøg på at komme med nogle tips det dinne mærkelige opservationer ;)
martin: Du kan tro jeg rydder op - nogle gange mere end jeg burde, men kan ikke lade være. Programmet stammer tilbage fra Delphi 1 og der er altså nogle mærkelige konstruktioner i det program. Hvad jeg ikke har fjernet af ram-lækager...
... men her var det altså en fejl 30.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.