Processing Java Runtime Error?

2 Antworten

In der Processing IDE wird die Fehlerzeile üblicherweise direkt markiert.

Andernfalls kannst du auch auf folgendem Weg den Fehlerbereich eingrenzen:

Schau erst nach allen Zeilen in der Funktion, in der du auf ein Element eines Arrays zugreifen möchtest und für die Angabe des Index eine Variable einsetzt.

Laut Fehlermeldung muss bei einem dieser Vorkommen die Indexvariable irgendwann den Wert -1 annehmen. Also kannst du für jedes Vorkommen ein Konstrukt bauen, welches den Fall für weitere Analysen abfängt.

Beispiel:

if (yourIndex < 0) {
  println("yourIndex: " + yourIndex); // set debugger breakpoint here
}

int value = yourArray[yourIndex];

Zum einen kannst du dir dabei den Namen der problematischen Indexvariable ausgeben lassen und zum anderen an der Stelle auch einen Breakpoint für den Debugmodus setzen.

Java gibt eigentlich immer den Stacktrace auf die Konsole aus, wenn ein Fehler nicht gefangen wurde.

Wenn du den Fehler fängst (try catch) und nur die Message ausgibst, sind das auch alle Infos.

Im Exception Objekt, welches im catch Block verfügbar ist, steckt der Stacktrace. Du kannst ihn im Debugger anschauen oder auch auf die Konsole printen.

Damit bekommst du die exakte Zeile, wo der Fehler aufgetreten ist. Du siehst auch den Kontext, wie er in diese Methode gekommen ist.

Falls mehrere Array Aufrufe in der gleichen Zeile stehen, dürfte der Stacktrace auch nicht zwingend zielführend sein. Ich würde dann den Code umschreiben, dass in jeder Zeile nur ein Array Zugriff stattfindet.

IntelliJ bietet auch Exception Breakpoints an. Dann stoppt der Debugger, wenn eine spezifische Exception geworfen wurde. Dann müsstest du alle Werte haben, die zur Exception führen.

Ein Hilfe Artikel dazu: https://www.jetbrains.com/help/idea/using-breakpoints.html

Andere IDEs könnte eventuell auch so eine Funktion anbieten.

Kaluz 
Fragesteller
 20.12.2023, 23:00

Ich bekomme in der Konsole eine Zeile angezeigt, die Zeile stimmt nur nicht. So weit ich weiß, stimmen die Zeilenangaben bei Runtime errors nie, da beim starten des sketch aus dem pde Zeilen vom Programm hinzugefügt werden und die Zeilenangaben sich nicht auf den Code im sketch beziehen. Gefährliches halbwissen, kann total falsch sein.

Zumindest, wenn das unten die Zeilennummern sind, die im Fehler ausgegeben werden.

at main.calculation(KALK.java:1172)

at main.DB(KALK.java:10334)

0
tide1109  20.12.2023, 23:19
@Kaluz

Processing habe ich noch nie benutzt. Habe Java Code meistens in IntelliJ geschrieben, wo nicht spontan Zeilen hinzugefügt werden und die Zeilennummer nicht mehr passt.

Durch das Studium habe ich jetzt auch BlueJ benutzt, aber dort konnte ich das nicht feststellen.

Die Zahl hinter dem Doppelpunkt stellt die Zeilennummer dar.

Die Zeilennummern kommen mir auch etwas hoch vor. Es ist nicht unmöglich, aber hatte nie eine Klasse (somit auch Datei) mit so vielen Zeilen.

Hier ist ein Artikel zum Thema Stacktrace.

Damit in der Exception die Zeilennummern im Source Code steht, muss ein Flag gesetzt sein. Wahrscheinlich ist es Standard bei den meisten IDEs. Weitere Infos. Keine Ahnung, was angezeigt wird, wenn es nicht gesetzt ist.

Ich würde sonst auch versuchen, ob du dein Code mit z.B. IntelliJ zum Laufen bekommst. Es gibt eine kostenlose Community Edition von IntelliJ.

0