|
|
Breakpoints werden nicht beachtet und verschwinden einfach |
|
ceram |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.01.2008, 15:40
Titel: Breakpoints werden nicht beachtet und verschwinden einfach
|
 |
Hallo,
irgendwie versteh ich das System mit den Breakpoints in Matlab nicht so ganz.
Ich habe eine Hauptfunktion, die andere Funktionen aufruft. Diese anderen Funktionen kann ich nur mit beträchtlichem Aufwand einzeln aufrufen. Setzte ich in diese Funktionen nun einen Breakpoint und rufe die Hauptfunktion auf, werden die Breakpoints in den Unterfunktionen gar nicht beachtet, sie werden sogar gelöscht.
Wieso beachtet Matlab denn nur Breakpoints in der Hauptpunktion? Ich will mich nicht ewig Schritt für Schritt in-steppen. Bei den Datenmengen unmöglich. Das muss doch auch anders gehen?
Auch conditional breakpoints funktionieren leider nur in der Hauptfunktion, die brauch ich aber gerade dort wo seltsame Werte auftauchen, also meist in den inneren Funktionen.
Vielleicht könnt ihr mir ja sagen was ich falsch mache...
Vielen Dank für eure Hilfe!
|
|
|
|
|
outsider |

Forum-Meister
|
 |
Beiträge: 806
|
 |
|
 |
Anmeldedatum: 03.09.07
|
 |
|
 |
Wohnort: München
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 15.01.2008, 00:08
Titel:
|
 |
Du hast mit Sicherheit irgendwo in Deinem Code (wahrscheinlich in den ersten Zeilen) wohl den beliebtesten Aufruf aller MATLAB-Anfänger...
dieses Commando entfernt nämlich auch die Breakpoints.
MfG
P.S. die nächste Zeile ist vermutlich "clc"...
|
|
|
punkNgrind |

Forum-Century
|
 |
Beiträge: 136
|
 |
|
 |
Anmeldedatum: 10.03.11
|
 |
|
 |
Wohnort: Hamburg
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 16.07.2013, 11:59
Titel:
|
 |
Aaaargh, exakt das war auch mein Problem.
Meine Reihenfolge clc, clear all, close all.
Danke outsider
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 16.07.2013, 16:49
Titel:
|
 |
Hallo punkNgrind,
Zitat: |
Meine Reihenfolge clc, clear all, close all. |
Deine Reihenfolge ist wenigstens alphabetisch sortiert.
Ich warne sehr genre vor diesem brutalen Clearing-Header. Es ist mir ein Rätsel, wieso dieser so weit verbreitet ist, obwohl die Vorteile sehr begrenzt sind.
Gruß, Jan
|
|
|
punkNgrind |

Forum-Century
|
 |
Beiträge: 136
|
 |
|
 |
Anmeldedatum: 10.03.11
|
 |
|
 |
Wohnort: Hamburg
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 16.07.2013, 19:58
Titel:
|
 |
Hallo Jan S,
wie so, wo genau sind denn die Nachteile?
Ich finde es einfach viel übersichtlicher, wenn ich ein Programm neu starte und alle Dinge die nichts damit zu tun haben zu schließen. Auch Zwischenvariabeln die in nicht mehr benötige lösche ich mit clear tmp.
Vorrausgesetzt natürlich ich lasse nicht zwei Programme parallel laufen, kommt bei mir aber nicht vor.
Ich persönlich finde es eher eine Unart, wenn Variabeln im Workspace oder Fenster die nicht mehr benötigt werden nicht gelöscht werden.
Zitat: |
Ich warne sehr genre vor diesem brutalen Clearing-Header. Es ist mir ein Rätsel, wieso dieser so weit verbreitet ist, obwohl die Vorteile sehr begrenzt sind. |
Kannst du bitte deine Aussage näher begründen!
Gruß
punkNgrind
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 16.07.2013, 21:43
Titel:
|
 |
Hallo,
ich würde das nicht in jedes Programm aufnehmen, sondern eher in eine Shortcut, die ich bei Bedarf drücke.
Vor allem aber ist das "all" fragwürdig. In den allermeisten Fällen wird ein "clear" auch sämtliche Variablen leeren ohne die unerwünschten Nebeneffekte des "all" (Breakpoints weg, geladene Funktionen weg). Ausnahme sind statische Variablen (persistent), aber das sieht man nun nicht sooo oft.
Grüße,
Harald
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 17.07.2013, 13:34
Titel:
|
 |
|
 |
|
Hallo Harald,
Auch PERSISTENT Variablen werden durch CLEAR ALL gelöscht, wenn nicht das M-File per MLOCK gesichert wurde.
Hallo punkNgrind,
Die meisten Nachteile hat "clear all":
1. Es werden alle Variablen im aktuelen Workspace gelöscht. Das mag nützlich sein, die Verwendung einer FUNCTION wäre aber viel übersichtlicher und würde es erlauben, auch mehrere Programmteile modular wiederzuverwenden.
2. Alle im Speicher befindlichen Funktionen werden gelöscht und das Nachladen von der Festplatte benötigt überproprtional viel Zeit. Zudem verschwendet das Energie.
3. Alle Breakpoints werden gelöscht. Und alles, was das Debuggen erschwert, ist eine wirklich schlechte Programmiermethode. Größere Programme benötigen das Testen mit dem Debugger und auch spätere Erweiterungen des Codes lassen sich kaum fehlerfrei hinbekommen.
CLC ist dagegen eher harmlos: Es verschwinden nur alle Warnungen und Fehlermeldungen aus dem Blickfeld. Aber wenn man die vorher kontrolliert hat, ist das zu verschmerzen.
CLOSE ALL verhindert, dass man irgendwelche anderen GUIs im Hintergrund mitlaufen lassen kann. Ich habe da z.B. ein Backup-Tool, welches die Daten von Zeit zu Zeit sichert, eine Arbeitszeiterfassung, mit der ich kontrollieren kann, wie lange ich an welchem Projekt arbeite usw. Es mag zwar sein, dass Du zur Zeit nur jeweils ein einziges Skript laufen lässt, niemals debugst und der "brute clearing header" deshalb zur Zeit kaum Auswirkungen hat. Aber das schränkt die zukünftige Arbeit deutlich ein. Wenn Deine Codes gut sind, werden sie wachsen und in größeren Projekten zusammengefasst werden. Dann spucken Dir schlechte Programmiermethoden irgendwann sehr in die Suppe. Wenn Deine Codes nicht gut sind, werden sie sowieso bald in der Versenkung verschwinden.
Der Programmiere hat also die Wahl, ob er sich von Anfang an einen ordentlichen Programmierstil zulegt und so schreibt, dass der Code auch in einem 100'000 Zeilen Programm noch sinnvoll eingesetzt werden kann, oder ob mal eben etwas runtergehudelt wird. Leider findet sich gerade der "brute clear header" aber in sehr vielen Codes, sogar in Funktionen, die im FileExchange veröffentlich werden. Die Wiederverwendbarkeit des Codes sinkt dadurch drastisch. Dies wird aber bei jedem größeren Projekt zum Knackpunkt: Wenn man jede Unterroutine neu schreiben und an die jeweiligen Bedingungen anpassen muss, kommt man nicht weit. Die Zusammenarbeit mit anderen Programmierern in einem Projekt klappt auch nicht, wenn ein Unterprogramm meint, mal alle anderen Funktionen (mit ihren Persistenten Variablen), Breakpoints und Fenster löschen zu dürfen.
Ich würde also unbedingt allen Code in FUNCTIONs packen um den jeweiligen Workspace suaber zu halten und die Wiederverwendbarkeit und Wartbarkeit zu ermöglichen. Und die Entscheidung, welche Fenster noch benötigt werden oder nicht sollte der User treffen, nicht eine beliebige Unterfunktion.
Ich habe zu viele Studenten gesehen, die ihre Übungsaufgaben mit solchen "unsauberen" Programmiermethoden hinbekommen haben, aber dann im Rahmen von Diplom- oder auch Doktorarbeit kläglich daran gescheitert sind, dass sie nicht erlernt haben eine strukturierte Methodik beim Programmieren anzuwenden. Da wurden dann 40 Scripte nacheinander aus dem Command Window aufgerufen und die jeweiligen Ergbnisse als MAT-File über das CLEAR ALL gerettet. Im Nachhinein war nicht mehr nachzuvollziehen, ob vielleicht aus Versehen einer der Programmschritte ausgelassen wurde. Man konnte damit zwar Ergebnisse produzieren, aber man konnte nicht mal eben eine gut funktionerende und ausgiebig getestete Unterfunktion an einen Kollegen weitergeben, denn sie Sieteneffekte waren nicht kontrollierbar.
Wird jetzt klarer, warum ich so gerne vor dem CLEAR ALL warne? Dies zu berücksichtigen und die Programmiermethoden daran anzupassen kann den jeweiligen Leuten und auch ihren Kollegen viele Stunden bis Wochen Programmierarbeit ersparen. Während saubere Programme in Instituten der Unis noch von Kollegen und Nachfolgern genutzt werden, verschwinden unsaubere so schnell wie möglich im Papierkorb. Natürlich bedeutet es zunächst einen höheren Aufwand, wenn man zu jedem geschriebenen Code die Langzeit-Nutzbarkeit bedenkt: Dokumentation, definierte Schnittstellen, Unit-Test-Funktionen, Testen der Inputs, Wählen eines Algorithmus, der auch für 100 MB an Input-Daten geeignet ist usw. Aber nach einiger Zeit gibt es einen Break-Even, ab dem sich das heftig bezahlt macht. Zu viele Projekt scheitern an schlechtem Programm-Design und Unübersichtlichkeit. Und ich möchte einen kleinen Teil dazu beitragen, dass dies nicht geschieht.
Gruß, Jan
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 17.07.2013, 19:03
Titel:
|
 |
Hallo Jan,
Zitat: |
Auch PERSISTENT Variablen werden durch CLEAR ALL gelöscht |
Genau das meinte ich, als Unterschied zwischen "clear" und "clear all". Habe mich aber vielleicht unklar ausgedrückt ;)
Grüße,
Harald
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 17.07.2013, 23:39
Titel:
|
 |
Hallo Harald,
Vielen Dank für die Klarstellung zu CLEAR & PERSISTENT. Es geschieht so selten, dass Du Dich in diesem Forum unklar ausdrückst, dass ich nicht widerstehen konnte. ;-)
Gruß, Jan
|
|
|
jurtsche |

Forum-Century
|
 |
Beiträge: 123
|
 |
|
 |
Anmeldedatum: 26.03.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.07.2013, 21:51
Titel:
|
 |
..und aus Erfahrung wäre dann noch zu sagen, dass clear all oder "clear egal was" nicht tatsächlich alles cleared, was es so gibt.
Ich meine, dass es nicht mit einem Schließen und Neustarten von Matlab gleichzusetzen ist.
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 19.07.2013, 10:05
Titel:
|
 |
Hallo jurtsche,
Ich hatte einmal eine sehr verwirrend Frage bearbeitet, bei der "clear all" wider Erwarten nicht alles clearte. Die Lösung war ulkig: Wenn "all" eine Variable ist, wird zunächst nur diese gelöscht:
Natürlich ist es eine schlechte Idee den Namen der builtin-Funktion "all" für eine Variable zu verwenden. Aber noch schlechter ist es, dass die Funktion CLEAR einen String entgegen nimmt und bei bestimmten Strings Spezial-Befehle ausführt. Die Verwendung solcher "magic strings" ist eine gemeine Falle für Programmierer und ein "Anti-Pattern". Viel besser wäre es gewesen, wenn alle Spezial-Befehle von Strings ausgelöst werden, die auf keinen Fall Namen von Variablen sein können, z.B. "clear -all".
Gruß, Jan
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|