2013-06-25 10 views
9

Für ein Forschungsprojekt entwickle ich die OpenJDK-Quellen mit Eclipse. Zu Debugging-Zwecken sind die Ansichten "Expressions" und "Display" des integrierten Debuggers sehr hilfreich. Beim Durchlaufen des Codes des javac Compiler-Tools schlägt die Ausdruckansicht auf einige Klassen fehl. Dann erhalten selbst die einfachsten Ausdrücke eine <error(s)_during_the_evaluation> in ihrer Wertespalte. Die detaillierte Fehlermeldung lautet dann:Warum schlägt die Ausdrucksansicht von Eclipse in einigen Klassen fehl?

Evaluations must contain either an expression or a block of well-formed statements 

Ich bin ziemlich sicher, ich habe gültige Ausdrücke eingegeben, als einfache Schalter in die Rufmethode (ein Stapelrahmen höher) macht die Ansicht Arbeiten.

ich zwei Screenshots zwei hochgeladen haben machen das Problem deutlicher:

Nicht-Arbeiterklasse JavacParser: Not-working class

Arbeiterklasse EndPosParser: Working class

Hat jemand je erlebt ein ähnliches Problem oder weiß, was der Grund ist oder wie es zu beheben? Wenn ich zwischen den zwei gezeigten Ansichten wechsle, mache ich nichts anderes, als einen Stapelrahmen höher zu gehen. Es wird erwartet, dass beide Ausdrücke in beiden Fällen ausgewertet werden. Soweit ich es beurteilen kann, tritt das gezeigte Fehlerverhalten nur in der Klasse JavacParser auf.

Danke!

+0

ich in so viele alte Berichte und Fehlerbehebungen für diesen Fehler speziell gestoßen, aber sie scheinen alle auf ältere Probleme im Zusammenhang mit (dh : Klassen mit Generika, mit den Versionen 3.1-3.8), ich bin jetzt auf 4.x + und sehe das immer noch. Hoffentlich wird jemand eine Erklärung finden, so dass es gemeldet werden kann. –

+0

Ich habe es geschafft, das zu umgehen, indem ich die Methode toString() überschreibe. Vielleicht möchte ich einen Schuss geben. Eine ziemlich hackige Art, das zu erreichen. Ich werde das später aktualisieren, wenn ich mir eine bessere Lösung ausdenke. –

Antwort

0

Soweit ich weiß, werden Ausdrücke im Zusammenhang mit dem aktuellen (obersten) Stackframe ausgewertet.

Es scheint so, als ob Ihr erster Screenshot erstellt wurde, als ein Objekt (EndPosParser) erstellt wurde. Da Ihr Objekt noch nicht existiert, kann this nicht ausgewertet werden. Der Verweis auf this kann erst ausgewertet werden, wenn die Super-Call-Kette Object erreicht hat.

Ich bin mir nicht sicher, warum 1+2 kann nicht ausgewertet werden. Meine beste Schätzung wäre: Eclipse erkennt Konstruktoren als nicht statische Methode und versucht 1+2 in einem nicht statischen Kontext auszuwerten. Aber das schlägt wieder fehl, weil this noch nicht existiert.

Edit: Das ist eine verdammt alte Frage, die ich zu beantworten gerade versucht zu ...

Verwandte Themen