Registriert: Di Dez 02, 2003 12:47 Beiträge: 300 Wohnort: Marburg
Also, hab da ein Programm (3D Editor für ne noch folgende simulation), Funzt auch alles, stürzt aber bei völig unterschiedlichen Aktionen ab. CPU Last is denn bei 100% und das wars. Hab alle repeat schleifen (sind leider ne menge) mit "Notausgängen ausgestattet, hilft aber nix. Kann auch schlecht alle Zeilen im Quelltext rot Markieren.
Meine Frage: Kann ich unter Delphi irgendwie gucken in welcher Zeile sich das Programm befindet???
_________________ Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de
Das Programm frißt sich also in einer der Repeat schelifen fest?
Erzeuge einfach ne Log datei beim start des Programms und lass da die Repeat schleifen ihren aktuellen Status(Die aktuelle Position) rein schreiben ... Wenns sichs aufgehängt hat kannste da dann nachschauen was das Prog als letztes gemacht hat
Registriert: Mi Aug 20, 2003 09:15 Beiträge: 70 Wohnort: Italien
so direkt kann man das nicht machen. Ein Weg ist die Methode Assert:
Mit dem Assert - Befehl kann man das Programm anhalten (wie halt); dabei wird die Zeilennummer (Code) in einer Message-Box ausgegeben.
Dem Assert wird eine Bedingung übergeben, bei der das Programm angehalten wird...
Wenn du dir sicher bist, in welchem Codesegment das Programm sich aufhängt, kannst du ja zur Laufzeit dort einen Haltepunkt hinzufügen (F5 im Code-Editor betätigen).
_________________ "Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt" Albert Einstein
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Warum so kompliziert??? Wenn du dein Programm in Delphi startest befindet es sich automatisch im Debugger. Wenn sich das Programm jetzt aufhängt, dann wechselst du nach Delphi und drückst auf das Pausezeichen. Dann bleibt Delphi automatisch da stehen wo es sich das Programm befindet. Evtl musst du dann mittels Callstack (Aufrufliste) noch in die passende Methode wechseln. Falls du aus deiner Schleife noch viel Dinge aufrufst. Bei Multithreaded Anwendungen musst du noch in den ensprechenden Thread wechseln. Also mit Hilfes des Threadlistenfensters. Alle beide zu finden unter "Ansicht" -> "Debug-Fenster"
Und das hat sogar noch den Vorteil, dass du den Inhalt von allen Variablen sehen kannst und wenn du dich langsam durchtastest (Schrittweise ausführung vom Programm) dann sogar genau siehst warum es nicht rausspringt. Was bei Loggs überhaupt nicht erkennbar ist.
Assert hat keine Ähnlichkeit mit Halt. Halt beendet das Programm wobei Assert lediglich eine Exeption auslost sobald die übergebene Bedingung False zurückgibt. Die Exception wird im schlimmsten Falle von der TApplication Klasse abgefangen aber niemals wird dabei die Anwenung beendet. Es dient eigentlich dazu im Falle eines Ungültigen Wertes (z.B.: Wenn eine Übergebene Variable nicht erstellt wurde etc.) die Ausführung der derzeitigen Aktion zu unterbrechen.
Assert hat noch einen anderen tieferen Sinn. Man kann in den Compileroptionen auch die Überprüfung von Assert Global austellen. In C++ schimpft sich das Releaseversion und Debugversion. Die Releaseversion überprüft dann nicht so stark nach ungültigen Werten und ist meistens schneller n der Ausführung.
Registriert: Di Dez 02, 2003 12:47 Beiträge: 300 Wohnort: Marburg
Werd mal rumprobieren. Das Problem is ja gerade, das es eigentlich nicht die repeat schleifen sein können. Nach den Aktionen bei denen es passirt müssten es die selektionsproceduren sein (kommen auf mausklick/irgendwie logisch beim editor) Aber da hab ich auch schon Sicherheitsüberprüfungen auf falsche werterückgaben eingebaut! naja was sind schon 3 tage erfolglose fehlersuch? Hab dabei wenigstens ne menge anderer feinheiten verbessert.
_________________ Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
geo hat geschrieben:
naja was sind schon 3 tage erfolglose fehlersuch?
So etwas passiert schon mal. Richtig schlimm sind aber die Fehler die mir einem entschiedenen Manchmal auftreten.
Auf jeden Fall ist der Debugger eine sehr mächtiges Werkzeug bei der Fehlersuche und eine intensive Nutzung wert. Ich habe das schon sehr oft feststellen dürfen.
Und wenn's dann gar nicht mehr weiter geht, sollte man sich überlegen, das Ganze eventuell in den Müll zu werfen, aufgrund der bisherigen Erfahrungen neu zu planen und alles neu zu implementieren.
Oft ist man damit schneller, als viel Zeit ins Herumdoktern an suboptimalem und unübersichtlichem Code zu investieren - wofür brauchst du denn in einem 3D-Editor so viele Repeat Schleifen?
Mitglieder in diesem Forum: 0 Mitglieder und 13 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.