09.01.2009, 09:39
Beitrag #1
|
|
|
09.01.2009, 10:40
(Dieser Beitrag wurde zuletzt bearbeitet: 09.01.2009 10:41 von IchSelbst.)
Beitrag #2
|
IchSelbst
LVF-Guru
Beiträge: 3.697
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Assertion Fehler - was nun
Meine Gedanken:
' schrieb:Was heisst das eigentlich.? Da ist kein C++ code von mir.
Nee, das ist ein Fehler Abfangen in der LV-IDE.
Mit Assertions werden z.B. Sicherheitsüberprüfungen gemacht. Hier: Eigentlich sollte COMMAND, das wohl ein String ist, nicht leer sein, da der nachfolgende Code mit einem leeren String nichts anfangen kann. Assertions fangen also Fehler ab, die gar nicht auftreten können bzw. sollten. Dumm nur, das bei diesem Assertion die Weiterleitung des Fehlers an den Fehlermanager (=> Errorcluster) der IDE fehlt.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
09.01.2009, 14:28
Beitrag #3
|
|
|
09.01.2009, 15:25
Beitrag #4
|
IchSelbst
LVF-Guru
Beiträge: 3.697
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Assertion Fehler - was nun
' schrieb:wenn man lang genug "Ignorieren" geklickt hat kommt man zu untenstehender Fehlermeldung....
Haste mal mit dem Fehlertext gegoogled? MSDN Runtimeerrors
Gelegentlich kommt es ja vor, dass die angezeigte Fehlermeldung mit der Fehlerursache gar nichts zu tun hat. Aus deiner Fehlermeldung würde ich jetzt schließen, dass du zu viele Threads, also z.B. parallele Schleifen, hast. Kann das wahr sein?
Was ich mir als Extremfälle auch vorstellen kann: Zuwenig Hauptspeicher oder zu wenig Plattenspeicher auf der Systemplatte.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
09.01.2009, 17:33
Beitrag #5
|
cb
LVF-SeniorMod
Beiträge: 1.731
Registriert seit: Feb 2006
2018SP1
2001
EN
40xxx
Deutschland
|
Assertion Fehler - was nun
' schrieb:Haste mal mit dem Fehlertext gegoogled? MSDN Runtimeerrors
Gelegentlich kommt es ja vor, dass die angezeigte Fehlermeldung mit der Fehlerursache gar nichts zu tun hat. Aus deiner Fehlermeldung würde ich jetzt schließen, dass du zu viele Threads, also z.B. parallele Schleifen, hast. Kann das wahr sein?
Was ich mir als Extremfälle auch vorstellen kann: Zuwenig Hauptspeicher oder zu wenig Plattenspeicher auf der Systemplatte.
zu viele Schleifen kann ich mir fast nicht vorstellen. Ich verwende ständig und bei jeder passenden und unpassenden Gelegenheit While-Schleifen und ich hab z.T. sehr große Projekte mit bis zu 800 selbst geschriebenen VIs, und ich hab nie auch nur ansatzweise mal Probleme gehabt, die daher rühren könnten, dass ich zu viele While-Schleifen verwende.
Soweit ich weiß ist auch lange nicht jede While-Schleife gleich ein Thread unter Windows, aber dazu kann Rolf K. bestimmt mehr sagen ...
|
|
|
09.01.2009, 20:23
Beitrag #6
|
TSC
LVF-Team
Beiträge: 1.882
Registriert seit: Sep 2008
LV 2018 SP1
2008
EN
52379
Deutschland
|
Assertion Fehler - was nun
' schrieb:zu viele Schleifen kann ich mir fast nicht vorstellen. Ich verwende ständig und bei jeder passenden und unpassenden Gelegenheit While-Schleifen und ich hab z.T. sehr große Projekte mit bis zu 800 selbst geschriebenen VIs, und ich hab nie auch nur ansatzweise mal Probleme gehabt, die daher rühren könnten, dass ich zu viele While-Schleifen verwende.
Soweit ich weiß ist auch lange nicht jede While-Schleife gleich ein Thread unter Windows, aber dazu kann Rolf K. bestimmt mehr sagen ...
Es kommt immer drauf an wie die Schleifen ineinander verschachtelt sind. Wenn die schleifen nacheinander ablaufen können ja sämtliche daten aus den schleifen ausm speicher entfernt werden wenn sie durch sind,.. aber sonst wird der arbeitasspeciher schon ziemlich belastet. wenn man dann noch sequenzvariablen verwendet kann da schon ein speicher volllaufen.
Ich bin noch nicht drüber gestolpert aber gibt es sowas wie endlosschleifen in LabVIEW?
rekursionen können auch böse enden.
*nur ein paar abendliche wochenend gedanken von mir*
LG
Torsten
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
09.01.2009, 21:10
Beitrag #7
|
eg
LVF-SeniorMod
Beiträge: 3.868
Registriert seit: Nov 2005
2016
2003
kA
66111
Deutschland
|
Assertion Fehler - was nun
Hast du zufällig Visual Studio installiert? Ich glaube man könnte damit LabVIEW debuggen.
|
|
|
09.01.2009, 21:16
Beitrag #8
|
TSC
LVF-Team
Beiträge: 1.882
Registriert seit: Sep 2008
LV 2018 SP1
2008
EN
52379
Deutschland
|
Assertion Fehler - was nun
' schrieb:Hast du zufällig Visual Studio installiert? Ich glaube man könnte damit LabVIEW debuggen.
hat er, oder eine ähnliche software. sonst würde er keine debugmöglichkeit angeboten bekommen.
denke ich.
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
10.01.2009, 00:30
(Dieser Beitrag wurde zuletzt bearbeitet: 10.01.2009 00:32 von rolfk.)
Beitrag #9
|
rolfk
LVF-Guru
Beiträge: 2.305
Registriert seit: Jun 2007
alle seit 6.0
1992
EN
2901GG
Niederlande
|
Assertion Fehler - was nun
' schrieb:zu viele Schleifen kann ich mir fast nicht vorstellen. Ich verwende ständig und bei jeder passenden und unpassenden Gelegenheit While-Schleifen und ich hab z.T. sehr große Projekte mit bis zu 800 selbst geschriebenen VIs, und ich hab nie auch nur ansatzweise mal Probleme gehabt, die daher rühren könnten, dass ich zu viele While-Schleifen verwende.
Soweit ich weiß ist auch lange nicht jede While-Schleife gleich ein Thread unter Windows, aber dazu kann Rolf K. bestimmt mehr sagen ...
Also dann tue ich mal. Nein eine LabVIEW Loop ist nicht automatisch ein Thread. Und internes quasi-parallelels Abarbeiten von LabVIEW Diagrammen funktionierte auch zu Zeiten und auf Plattformen wo kein Multithreading verfügbar war (Windows 3.1 und MacOS Classic). LabVIEW verwendet dazu einen eigenen Clumpmanager, wie sie das nennen, der Code in Clumps aufteilt die am Ende eines Clumps jeweils zu anderen unabhängigen Clumps umgeschaltet werden können, wenn den vorhanden. Dieses LabVIEW eigenen Multithreading ist noch immer vorhanden.
Aber mit Multithreading im OS alloziert LabVIEW per Execution System eine Anzahl Threads. Früher waren das zwei, dann vier unabhängig ob SMP oder nicht und heutzutage glaube ich ungefähr acht per CPU core. LabVIEW verteilt dann die Clumps auf die verschiedenen Threads.
Die Fehlermeldung hat aber wohl nichts damit zu tun. Was hier passiert ist, dass der LabVIEW Code, der in C++ geschrieben ist einen ungültigen Parameter erlebt hat. Das verursacht eine Exception in der Library Funktion die aber vom aufrufenden Code nicht abgefangen und behandelt wird. Daher endet die Exception im Standard Exception Handler der verwendeten Library und der kann nicht viel mehr tun als eine Message Box anzeigen. Von da aus gibts zwei Alternativen: Die Applikation abschiessen oder weiterlaufen lassen. Die zweite rennt dann wegen irgendwas gleich wieder in diese Exception und alles beginnt aufs Neue. Nach ein paar mal in diesem Hamsterrad rundgedreht zu haben beginnt die C++ Runtime Library doch langsam Stack- oder andere ähnliche Problem zu bekommen und von da an geht es nur noch in mehr und mehr komischen Fehlern weiter bis irgend ein Exceptionhandler ganz einfach das Ganze brutal abschiesst.
Exceptions sind praktisch aber die konsequente Abhandlung davon ist sehr lästig.
Rolf Kalbermatter
|
|
|
10.01.2009, 10:16
|
IchSelbst
LVF-Guru
Beiträge: 3.697
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Assertion Fehler - was nun
Was uns Rolf ( ) uns, speziell gottfried, gesagt hat ist: Die zweite Fehlermeldung kannst/musst du ignorieren. Die ist mit an 100% grenzender Wahrscheinlichkeit ein Folgefehler der ersten Meldung. Bereits bei der ersten Meldung muss du das Programm beenden.
Was du jetzt machen kannst?
Erstens:
Die (erste) Fehlermeldung an NI schicken. Und auf einer Antwort bestehen. Ggf. weitere Daten mitschicken wie z.B. Zeile und Modul, in der der Fehler aufgeterten ist.
Zweitens:
Das gesamte Projekt hinschicken.
Drittens, interessan:
Durch Weglassen diverser Codeteile feststellen, welcher Code den Fehler auslöst. Was nur, wie auch bei zweitens, sinnvoll ist, wenn der Fehler zuvor zu 100% reproduzierbar ist. Dabei hoffen, dass der Fehler nicht nur in Kombination mehrerer Codeteile auftritt.
Viertens:
Wenn der Fehler nur selten auftritt, also sporadisch und nicht wiederholbar, dann Ansehen wie einen kleinen Schlaganfall: Ignorieren und durch. Irgendwann behebt er sich von ganz von selbst.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
| |