04. august 2008 - 10:43Der er
11 kommentarer og 1 løsning
Debugging af TObjectList
Jeg har en variabel som er en TObjectList. Når man tilføjer den til watch-vinduet, kan man ikke se elementerne i den. Det er vel meget naturligt, da debuggeren ikke kan vide hvilke slags objekter der er i den.
Men kan man tvinge debuggeren til at tolke dem som en bestemt objekt-type? Jeg ved at alle objekterne er samme type.
Jeg kan selvfølgelig caste:
TDataElement(MinListe[1])
Men da jeg ikke ved hvor mange elementer der er, bliver det bøvlet.
Hvordan med næste version af Delphi? Den får jo generics, så måske kunne man forestille sig at:
Her kan vi vist være enige om at "minListe" er en variabel. Den er endnu ikke en instans af TObjectList. At den så senere kommer til at indeholde/pege på en instans af TObjectList, er noget andet.
Men det er variablen (i dette tilfælde "minListe"), som man tilføjer til watch-vinduet. Den kan jo i princippet være NIL, og altså ikke indeholde/pege på nogen instans.
Har altid anset variable værende statiske datatyper (integers, records og lignende), mens objekter er noget dynamisk som man opretter og opbevarer i en ... objektinstansvariabel (skjult pointer). Man, som du skriver, bliver det ikke en instansvariabel før det tildeles et objekt. Indtil da kan man meget vel kalde det en variabel.
Så tror jeg ikke det kan lade sig gøre. Bruger ikke Watches meget. Foretrækker at holde musen over "variablen" når jeg debugger. Klikker man på det lille plus kan man se hele strukturen. I øvrigt er det sjældent man laver en "aList[1]", men har det i en løkke - og så kan du skrive aList[i] og se objekterne et efter et.
Mht. din form spotter jeg en almindelig fejl: Create skal stå før din try. Linjen "aList.Free;" vil fejle hvis objektet ikke oprettes korrekt.
OK. Det vil jeg prøve, men det kan da godt være at en objekt-liste er for kompleks til at debuggeren kan kigge ind i den.
Mht. at kigge på aList[i] vil det også være OK. Det ville bare være smartere at kunne lade indlæsningen af TData objekter blive færdig, og så kunne folde hele strukturen ud i watch-vinduet.
Det kan man f.eks. i Smalltalk, som har rimeligt gode introspection muligheder. Måske kan man også i Java (det burde man kunne).
Jeg prøver med de tips du har givet. Ellers kan jeg jo altid få strukturen skrevet ud i en log-fil eller lignende.
Hvis du vil skrive noget til en fil har Delphi gode værktøjer udi RTTI, så man kan evt. frembringe en generisk funktion der kan logge objektets data til en fil/stream
Ja. Det tænkte jeg også. Jeg har fundet noget om RTTI i en gammel Delphi-bog jeg har liggende, så jeg prøver at strikke noget sammen.
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.