Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash 8

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-12-2009, 15:48   #1 (permalink)
Linksaußen
 
Benutzerbild von Fralle
 
Registriert seit: Jun 2003
Ort: Essen
Beiträge: 552
Fehlersuche

Hallo,

ich habe einen recht komplexen Flashfilm mit vielen Codeschnipseln. Es ist mittlerweile ein recht umfangreiches Programm. Umso schwieriger gestaltet sich die Fehlersuche...

Ab und zu bekomme ich die klassische Killermeldung:
Code:
Flash Player wird durch ein Skript in diesem Film verlangsamt. Wenn das Skript weiterhin ausgeführt wird, reagiert der Computer möglicherweise nicht mehr. Möchten Sie die Ausführung des Skripts abbrechen?
Wie kann ich jetzt exakt den Punkt im Code aufspüren, an dem das passiert?
Leider ist dieser Fehler momentan nur schwer reproduzierbar, da er nicht regelmäßig auftritt.

Mit dem Debug-Modus kenne ich mich (noch) gar nicht aus...

noch etwas anderes:
Kann es sein, dass sich Actionscript in einer im Browser eingebetteten SWF anders verhält?? Ich habe in meinem Flashfilm ein paar Fehler (betrifft lineTo), die nur im Opera auftreten, nicht aber in der Flash-Entwicklungsumgebung.
__________________
Der Ball ist rund
Fralle ist offline   Mit Zitat antworten
Alt 22-12-2009, 16:30   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
wenn du z.b. irgendwo eine schleife hast, die 10.000 mal durchlaufen wird ..
oder sonst irgend etwas, was sehr lange dauert. das musst du aufteilen und z.b. stückchenweisse in onEnterFrame's abarbeiten.
wo du das gemacht hast, das musst du selbst wissen.

das problem ist z.b. auch (bei so langen, nicht gestückelten, also nicht flash-gerechten scripten) das es auf deinem rechner vielleicht geht, aber bei einem leistungsschwächeren rechner (oder viele programme zusätzlich geöffnet), dass es dann nicht mehr geht.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 22-12-2009, 17:05   #3 (permalink)
Linksaußen
 
Benutzerbild von Fralle
 
Registriert seit: Jun 2003
Ort: Essen
Beiträge: 552
Natürlich weiss ich, wo überall schleifen im Code sind. Aber herauszufinden, welche davon die Probleme bereitet ist dadurch äußerst schwierig.

Ich habe grundsätzlich in vielen Funktionen immer trace-Befehle drin, damit ich besser nachvollziehen kann, wo im Code ich mich gerade befinde.

Eigentlich müsste Flash doch wissen, an welcher Stelle im Code (Programmzeile) der Player hängt...

zu 2.: Du meinst eine Schleife mit X Durchläufen läuft auf dem starken Rechner immer durch, während bei einem schwachen die Toleranz überschritten wird und der Flashplayer meckert? Es könnte also sein, dass so eine Meldung in gewissen Fällen gar nicht durch einen echten Fehler in der Programmierung hervorgerufen wird?
__________________
Der Ball ist rund
Fralle ist offline   Mit Zitat antworten
Alt 22-12-2009, 17:27   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
trace
trace selbst kostet extrem viel zeit (kannst du übrigens bei 'einstellungen für veröffentlichungen' ein-/ausschalten)
sowas nur themporär verwenden und danach zumindestens auskommentieren.
ich habe i.d.R. eine eigene debug-klasse und verwalte die mit flags (je nachdem, was ich gerade überprüfen will).

"..an welcher Stelle im Code (Programmzeile) der Player hängt..."
das zu wissen nützt garnichts. die gesamtzeit ist überschritten worden. das ganze dauert zu lange, und nicht der letzte befehl (p.s. ab flash 9 kann man diese zeit einstellen/verändern).

"..auf dem starken Rechner immer durch, während bei einem schwachen.."
nicht immer, aber grundsätzlich: ja

es gibt filme (.avi, mpeg, usw.) deren software ist so, das die zeit eingehalten wird. notfalls wird ein frame übersprungen, hautpsache das ding ist lippensynchron.
bei animationen (swf, direktor, usw.) bei denen sich ein frame aus den daten des vorherigen frames aufbaut, da darf natürlich kein frame entfallen. folgerichtig kann nicht für die ablaufzeit garantiert werden.
zuerst setzt flash automatisch die framerate herunter und wenn das nicht langt, dann 'mäckert' flash. schliesslich ist die primäre aufgabe von flash eine animation zu zeigen und nicht 'den urknall zu berechnen'.

also wenn das bei dir der fall ist, dann hast du flash gewaltig 'missbraucht' ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 05-01-2010, 11:12   #5 (permalink)
Linksaußen
 
Benutzerbild von Fralle
 
Registriert seit: Jun 2003
Ort: Essen
Beiträge: 552
Erstmal: Frohes Neues nachträglich!


Zitat:
Zitat von hgseib Beitrag anzeigen
trace
trace selbst kostet extrem viel zeit (kannst du übrigens bei 'einstellungen für veröffentlichungen' ein-/ausschalten)
sowas nur themporär verwenden und danach zumindestens auskommentieren.
Wenn ich bei den Einstellungen die Option "trace-Aktionen übergehen" auswähle, sollte ich dann trozdem alle trace-Befehle auskommentieren? (Wie wird eigentlich Kommentar-Code beim SWF-Export behandelt?)

Zitat:
Zitat von hgseib Beitrag anzeigen
ich habe i.d.R. eine eigene debug-klasse und verwalte die mit flags (je nachdem, was ich gerade überprüfen will).
Leider habe ich das mit der sauberen OOP und mit den Klassen nicht so drauf, mache alles eher über Funktionen. Kannst Du das mit der debug-klasse und den flags ein bisschen mehr erläutern?


Zitat:
Zitat von hgseib Beitrag anzeigen
schliesslich ist die primäre aufgabe von flash eine animation zu zeigen und nicht 'den urknall zu berechnen'.

also wenn das bei dir der fall ist, dann hast du flash gewaltig 'missbraucht' ;-)
Nee, bei mir ist das Hängen des Players sicherlich auf eine Programmierungenauigkeit zurückzuführen (bsp. eine var steht fälschlicherweise auf undefined).
Allerdings stellt sich trotzdem noch diese Frage:
Kann es sein, dass sich Actionscript in einer im Browser eingebetteten SWF anders verhält?? Ich habe in meinem Flashfilm ein paar Fehler (betrifft lineTo), die nur im Opera auftreten, nicht aber in der Flash-Entwicklungsumgebung.
__________________
Der Ball ist rund

Geändert von Fralle (05-01-2010 um 11:30 Uhr)
Fralle ist offline   Mit Zitat antworten
Alt 05-01-2010, 11:29   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
a) das sprengt hier den rahmen

b) nöö, so nicht.

sorry, dann musst du 'sauberer' programmieren.
u.a. z.b.
a>=b anstatt a==b
besonders bei zahlen kann es durch rundungsfehlern zu geringen abweichungen kommen. dann ist es halt nicht mehr gleich.

oder z.b.
AS2 ist interpreter und damit ist ein undefined kein fehler, kann aber zu falschen ergebnissen führen. als programmierer bis du selbst dafür verantwortlich, das alles so ist, wie du dir das vorstellst. der computer kann das nicht wissen oder erkennen. sonst wäre er ja schlauer als du ;-)

usw.
da gibt es keine einfache und schnelle lösung. selbst erfahrene programmierer suchen manchmal tagelang nach der ursache von einem fehler.

dir bleibt nur eins: mit dem debugger das programm step für step durchgehen
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (05-01-2010 um 11:33 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 05-01-2010, 11:57   #7 (permalink)
Linksaußen
 
Benutzerbild von Fralle
 
Registriert seit: Jun 2003
Ort: Essen
Beiträge: 552
Zitat:
Zitat von hgseib Beitrag anzeigen
a) das sprengt hier den rahmen
...das war vermutlich auf die Frage nach der genaueren Erläuterung gemeint. ok.

Grundsätzlich habe ich auch vor, AS3 richtig zu lernen. Tue mir aber mit dem Anfang schwer. Vielleicht hast Du da einen guten Tip (Tutorial, Literatur)?


Zitat:
Zitat von hgseib Beitrag anzeigen
b) nöö, so nicht.
Worauf ist das bezogen?

Zitat:
Zitat von hgseib Beitrag anzeigen
sorry, dann musst du 'sauberer' programmieren.
u.a. z.b.
a>=b anstatt a==b
besonders bei zahlen kann es durch rundungsfehlern zu geringen abweichungen kommen. dann ist es halt nicht mehr gleich.
Selbstverständlich versuche ich so sauber wie möglich zu programmieren. Leider weiss ich aber nicht immer, was die sauberste Variante ist. Beispiel: for-Schleife. Wie ist es korrekt?
Code:
for (i = 1; i<10; i++)
Code:
for (var i = 1; i<10; i++)
Code:
for (var i:Number = 1; i<10; i++)


Zitat:
Zitat von hgseib Beitrag anzeigen
oder z.b.
AS2 ist interpreter und damit ist ein undefined kein fehler, kann aber zu falschen ergebnissen führen. als programmierer bis du selbst dafür verantwortlich, das alles so ist, wie du dir das vorstellst. der computer kann das nicht wissen oder erkennen. sonst wäre er ja schlauer als du ;-)
undefined kann aber dafür sorgen, dass eine Schleife ins Unendliche läuft, was oft die Ursache für einen Absturz ist...


Zitat:
Zitat von hgseib Beitrag anzeigen
dir bleibt nur eins: mit dem debugger das programm step für step durchgehen
Das Arbeiten mit dem Debugger muss ich mir noch angewöhnen. Allerdings habe ich aktuell das Problem, dass dieser Fehler eben erst im Browser auftaucht und nie in der Entwicklungsumgebung.
__________________
Der Ball ist rund
Fralle ist offline   Mit Zitat antworten
Alt 05-01-2010, 12:57   #8 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
a) ja
b) mein nöö bezieht sich auf dein nee-text ;-)
ein swf wird mit einem plugin ausgeführt und da gibts keine unterschiedlichen für browser, sondern nur eins. unterschiede gibt es, wenn man das swf 'verlässt'. beim laden z.b. wird der browser und/oder das betriebssystem beauftragt - dann sind unterschiede 'normal'.

c)
var i:Number;
for (i= 1; i<10; i++)
nützt aber nicht immer etwas, da AS2 nicht strikt type-isiert.
hier hilft nur 'preusische' disziplien und variable immer definieren und testen
var i:Number=0;
if (i) ..

d)
"..dass dieser Fehler eben erst im Browser auftaucht und nie in der Entwicklungsumgebung.."
such mal in der flash-hilfe nach:
remote debuggen
du kannst auch im browser dein swf debuggen.

kann aber nicht sein. eine endlosschleife wird auch in der flash-umgebung angemahnt.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
bin auf fehlersuche :p mortifarus ActionScript 1 3 14-01-2007 12:23
fehlersuche nemaxtowni Flash MX 2004 1 08-07-2004 16:12
Fehlersuche Oberonal ActionScript 1 1 08-07-2004 00:08
Fehlersuche Oberonal ActionScript 1 3 19-11-2003 18:15


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:57 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele