Avatar billede hrc Mester
21. marts 2007 - 23:29 Der 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)

Er der nogen der kan fortælle mig hvad der sker?
Avatar billede a_nor Nybegynder
22. marts 2007 - 00:33 #1
Hvis du flytter erklæringen af MyForm ind i funktionen bliver OnCreate kaldt:

function Open(aOwner : TComponent; ... ) : boolean;
  var MyForm: tMyForm;
begin
  MyForm := TMyForm.Create(aOwner);
  ...
  ...
Avatar billede hrc Mester
22. marts 2007 - 09:31 #2
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.
Avatar billede a_nor Nybegynder
22. marts 2007 - 09:42 #3
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
Avatar billede a_nor Nybegynder
22. marts 2007 - 09:45 #4
Er det alle dine forms der har den nævnte mærkværdighed?

Nu skrev jeg FLYTTE. huskede du at slette den oprindelige automatisk skabte erklæring?
Avatar billede hrc Mester
22. marts 2007 - 11:03 #5
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!
Avatar billede hrc Mester
22. marts 2007 - 11:05 #6
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.
Avatar billede a_nor Nybegynder
22. marts 2007 - 11:10 #7
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"  :-)
Avatar billede hrc Mester
22. marts 2007 - 11:11 #8
(det er komponenten der er tudegrim, ikke mig)
Avatar billede martinlind Nybegynder
22. marts 2007 - 14:44 #9
Hvis du har så meget "rod" i din kode at delphi ikke kan finde ud af at slette, er det på tide at ryde op :)
Avatar billede hrc Mester
22. marts 2007 - 22:56 #10
Vidste ikke at Delphi 7 havde en AI-compiler. Gad vide om der også er en AI-programmør indbygget? Den kunne være god at finde.
Avatar billede hrc Mester
23. marts 2007 - 09:17 #11
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?
Avatar billede martinlind Nybegynder
23. marts 2007 - 09:41 #12
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 ;)

Ha' en god weekend
Avatar billede a_nor Nybegynder
23. marts 2007 - 13:12 #13
Tak, HRC,  Det er fint man også kan bistå med virtuel "abning"

mvh Anders
Avatar billede hrc Mester
24. marts 2007 - 09:06 #14
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester