WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Breakpoints werden nicht beachtet und verschwinden einfach

 

ceram

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.01.2008, 15:40     Titel: Breakpoints werden nicht beachtet und verschwinden einfach
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 15.01.2008, 00:08     Titel:
  Antworten mit Zitat      
Du hast mit Sicherheit irgendwo in Deinem Code (wahrscheinlich in den ersten Zeilen) wohl den beliebtesten Aufruf aller MATLAB-Anfänger... Smile

Code:


dieses Commando entfernt nämlich auch die Breakpoints.


MfG
P.S. die nächste Zeile ist vermutlich "clc"... Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
punkNgrind
Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 16.07.2013, 11:59     Titel:
  Antworten mit Zitat      
Aaaargh, exakt das war auch mein Problem. Embarassed

Meine Reihenfolge clc, clear all, close all.

Danke outsider
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 16.07.2013, 16:49     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
punkNgrind
Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 16.07.2013, 19:58     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.07.2013, 21:43     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.07.2013, 13:34     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.07.2013, 19:03     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.07.2013, 23:39     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
jurtsche
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2013, 21:51     Titel:
  Antworten mit Zitat      
..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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.07.2013, 10:05     Titel:
  Antworten mit Zitat      
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:
Code:
data = 5;
all = 6;
clear all
disp(data);

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.