Ik ben sinds een klein tijdje aan programmeren in ActionScript 3 voor op werk, en met enkele irritaties (en workarounds) verder, ben ik vandaag tegen een raar trekje aangelopen. Het lijkt er namelijk op dat de 'trace' functie een lage prioriteit heeft, waardoor de timing ervan niet in sync loopt met de daadwerkelijke loop van je programma. Wat absoluut niet handig is je bezig bent met testen/debuggen 
Het geval was namelijk dat ik een programma maak waarbij direct wordt gecommuniceert met een MySQL database en informatie daarvan in een HashMap wordt opgeslagen. (Flash kent standaard geen intelligente collections of de mogelijkheid om tegen MySQL aan te praten. Daar zijn gelukkig al actionscripts voor geschreven om dit mogelijk te maken. Wat betreft de veiligheid van direct tegen MySQL kunnen praten: binnen de scoop waar dit programma voor gebruikt gaat worden is dat irrelevant).
Het ophalen van die informatie uit de database is verdeeld over meerdere queries, met als gevolg dat de informatie in HashMaps stoppen ook over meerdere functie's verspreid wordt (momenteel een stuk of 10 functie's). Tijdens het testen, bleek dat ik ergens een oneindig loopje had gemaakt, vanwege wat copy/paste werk van functies: bij de laatste functie in de rij werd een functie van 3 stappen daarvoor aangeroepen. Dit had tot gevolg dat Flash 100% cpu tijd in beslag nam en er een memoryleak was. Enige manier om de boel te stoppen was door compleet Flash CS3 Professional te killen via de TaskManager van Windows.
Om te kijken waar dit misging heb ik die code besproeid met traces, maar tijdens het draaien van het programma werd vanaf die eerste functie al helemaal niets meer naar de output geschreven, terwijl het programma wel verder liep en pas 7 functies later in een oneindige lus terecht kwam. Tot die tijd had ik dus eigenlijk al allemaal output moeten zien, maar die is nooit voorbij gekomen. Wat bij mij tot de conclusie leidt dat code ondertussen kan doorlopen en dat na afloop pas de output werkelijk wordt getoond.
Kan iemand dit bevestigen en is er ook een manier output wel realtime te tonen?
Het geval was namelijk dat ik een programma maak waarbij direct wordt gecommuniceert met een MySQL database en informatie daarvan in een HashMap wordt opgeslagen. (Flash kent standaard geen intelligente collections of de mogelijkheid om tegen MySQL aan te praten. Daar zijn gelukkig al actionscripts voor geschreven om dit mogelijk te maken. Wat betreft de veiligheid van direct tegen MySQL kunnen praten: binnen de scoop waar dit programma voor gebruikt gaat worden is dat irrelevant).
Het ophalen van die informatie uit de database is verdeeld over meerdere queries, met als gevolg dat de informatie in HashMaps stoppen ook over meerdere functie's verspreid wordt (momenteel een stuk of 10 functie's). Tijdens het testen, bleek dat ik ergens een oneindig loopje had gemaakt, vanwege wat copy/paste werk van functies: bij de laatste functie in de rij werd een functie van 3 stappen daarvoor aangeroepen. Dit had tot gevolg dat Flash 100% cpu tijd in beslag nam en er een memoryleak was. Enige manier om de boel te stoppen was door compleet Flash CS3 Professional te killen via de TaskManager van Windows.
Om te kijken waar dit misging heb ik die code besproeid met traces, maar tijdens het draaien van het programma werd vanaf die eerste functie al helemaal niets meer naar de output geschreven, terwijl het programma wel verder liep en pas 7 functies later in een oneindige lus terecht kwam. Tot die tijd had ik dus eigenlijk al allemaal output moeten zien, maar die is nooit voorbij gekomen. Wat bij mij tot de conclusie leidt dat code ondertussen kan doorlopen en dat na afloop pas de output werkelijk wordt getoond.
Kan iemand dit bevestigen en is er ook een manier output wel realtime te tonen?
Vouw mee bij Fatal Error Group! - F@H: #10