Schlagwort-Archive: Fehlermeldung

Linux und ich, wir beide haben eine schwierige Beziehung. Wir verstehen uns nicht besonders gut, aber wir kommen zur Not miteinander aus, wenn es sich nicht vermeiden lässt. Ich kann den Linux-Desktop bedienen, wenn ich muss, und ich bin auch in der Unix-Shell nicht völlig hilflos, auch wenn ich die Konsolenbefehle meistens trotzdem immer wieder nachlesen muss. Ich empfinde oft eine gewisse prinzipielle Sympathie für Linux, aber ich habe auch Vorbehalte und in mancher Hinsicht wiederum sogar eine Abneigung. Schon im Jahr 2000 begann ich mich grundsätzlich für Linux zu interessieren. Im Juli 2003 besuchte ich sogar den LinuxTag in Karlsruhe und hörte mir einige Vorträge an. Ich wollte mich informieren. Meine ersten eigenen Gehversuche in der Linux-Welt machte ich dann tatsächlich erst im Jahr 2005 mit SUSE Linux in einer virtuellen Maschine.

Ich wollte eigentlich gar nicht viel machen, nur einen Apache Webserver installieren, dann darin eine OTRS-Installation laufen lassen. Nur so zum Spaß und zum Testen. Ich rechnete bereits fest damit, dass nichts funktionieren würde, und so ging die Installation von Apache wie erwartet total in die Hose. Jeder Fliegenschiss unter Linux musste umständlich über die Konsole gemacht werden, der Linux-Desktop war vermutlich nur als Gag dabei, um Windows-Nutzer zu trollen. Meine Arbeit bestand hauptsächlich darin, kryptische Fehlermeldungen aus der Shell bei Google einzutippen, im Internet nach einer Lösung zu suchen, daraus wiederum kryptische Befehle in die Shell einzutippen, und das dann jeweils für die nächsten 200 Fehlermeldungen. Da werden reihenweise Pfade nicht gefunden, irgendwelche Pakete fehlen, die Zeichenkodierung ist falsch, Dateien können nicht gelesen werden, Berechtigungen sind falsch gesetzt, der Mond steht nicht im richtigen Verhältnis zur Sonne, man kennt das ja. Schöne, gemütliche Linux-Welt.

Schon im Jahr 2008 startete ich einen erneuten Versuch, mich endlich so richtig mit Linux anzufreunden, die Chancen standen besser denn je: Linux war offenbar so richtig ausgereift und benutzerfreundlich geworden. Linux ist die Zukunft, wie könnte ich dem Betriebssystem da eine zweite Chance verweigern? Ich glaube ich installierte Fedora oder Debian oder sowas. Ich konnte tatsächlich schon recht viel mit dem Desktop arbeiten, da störte es mich auch nicht, dass die Soundtreiber für das Notebook unter Linux nicht funktionierten. Es sah schließlich alles so schön aus. Ich wollte einen Compiler für C++ ausprobieren und versuchte nach einer Internet-Anleitung über die Konsole (wie denn auch sonst?) den GCC zu installieren. Die Installation war mir nach anfänglichen Problemen irgendwann geglückt. Dummerweise wusste ich leider nicht, wohin der Compiler eigentlich installiert worden war oder auf welchen Namen er hörte. Die Installation über die Konsole kommt einem doch sehr spartanisch vor, wenn man die bunten Windows-Installer gewohnt ist, die brav nach dem Pfad fragen. Ich kratzte mich hilflos am Kopf während ich versuchte, aus dem Linux-Dateisystem schlau zu werden. Wo ist Laufwerk C? „etc“? „opt“? „var“? Hilfe, wie kann ich Dateien suchen?

Okay, ich hätte mich schlauer anstellen können, aber es macht einfach keinen Spaß, sich wie der größte Anfänger zu fühlen, und Linux gab mir genau dieses unangenehme Gefühl. Und so verschwand Linux wieder von meinem Notebook. Dennoch verwarf ich meinen ursprünglichen Plan nie, es irgendwann doch einmal ganz ernsthaft zu versuchen, wenn die Zeit reif ist. Aber dazu müsste Linux mir schon noch ein ganzes Stück entgegenkommen.

Januar 2016: Microsoft gibt sich seit Monaten mit der aktuell noch kostenfreien Spyware Windows 10 alle Mühe, mir den Spaß an Windows endgültig zu verderben. Ein Wechsel zu Windows 10 kommt für mich derzeit aus mehreren Gründen überhaupt nicht in Frage. Es ist also der perfekte Zeitpunkt, einen Blick auf eine aktuelle Linux-Distribution zu werfen, die zudem besonders anfänger- und umsteigerfreundlich zu sein scheint: Ubuntu. Schon vor Monaten habe ich mich bei echten Linux-Fans unter meinen Arbeitskollegen informiert und mich beraten lassen. Ubuntu sei so wundervoll, sehr benutzerfreundlich und wirklich extrem leicht zu bedienen. Die Probleme der Vergangenheit sind alle längst behoben, sogar die Treiberunterstützung wurde deutlich verbessert. Prima, dann ist ja alles klar.

Ich installierte mir also Ubuntu 15.10 in Virtualbox:

ubuntu

Oh, ja, in der Tat sehr wundervoll. Ubuntu lässt sich nicht starten. Schon kurz nach der Installation ist meine Abenteuerreise beendet, der Zeichensalat auf dem Bildschirm sah jedenfalls nicht nach dem Betriebssystem aus, das ich haben wollte. Ich musste wohl irgendetwas falsch gemacht haben. Sogleich wurde die VM gelöscht, neu angelegt und Ubuntu nochmals installiert. Diesmal aber richtig und mit doppelt soviel Konzentration bei den Details.

Nachdem auch die zweite Installation zu meinem Entsetzen scheinbar missglückt war und Ubuntu sich partout nicht starten ließ, beschloss ich entgegen meiner eigentlichen Vorsätze die Fehlermeldung wie gewohnt bei Google einzutippen. Dadurch fand ich tatsächlich heraus, dass ich die Bootreihenfolge der Laufwerke ändern musste, so dass die VM zuerst von der Festplatte startet (obwohl keine DVD im Laufwerk ist). Für aussagekräftigere Fehlermeldungen ist in der Linux-Community offenbar auch kein Geld da. Es ist mir schleierhaft, wie ich aus dem hingerotzten Output erkennen soll, dass die Bootreihenfolge falsch ist oder warum sie falsch ist. „I/O Error“, „Unable to read page“, „squashfs_read_data failed to read block“, „SQUASHFS error“, alles klar, das hilft mir natürlich weiter. Auch hätte ich doch von Geburt an wissen müssen, dass „dev sr0“ das DVD-Laufwerk ist. Aha.

Ubuntu fängt also wieder GENAU so an, wie ich Linux seit vielen Jahren kenne und hasse: Ich muss jedes Mal nach Fehlermeldungen googlen, um das Betriebssystem halbwegs nutzen zu können. Egal wie ich es anfange, endet es irgendwie immer damit, dass ich Fehlermeldungen in eine Suchmaschine eintippe um jemanden zu finden, der irgendwo die Lösung gepostet hat. Wieso geht das bei Linux nicht anders? Ich kann es mir absolut nicht erklären. Ich will das nicht, ich habe darauf keine Lust. Ich versuche es vielleicht in 4 Jahren nochmal. Merci, dass es dich gibt, Windows 7.

Vor zwei Tagen ist Eclipse Mars (Version 4.5) erschienen. Voller Vorfreude habe ich mir das neue Release direkt am Erscheinungstag installiert, sowohl im Büro als auch zuhause. Heute habe ich das blöde Mistding immer noch nicht fehlerfrei am laufen. So lautet mein Fazit nach zwei verschwendeten Tagen, in denen ich weitestgehend irgendwelche Fehlermeldungen googlen durfte: Eclipse Mars ist einfach scheiße. Die Vorgängerversion Eclipse Luna hat mir in einem ganzen Jahr nicht soviel Ärger gemacht.

Wo sind „Check for Updates“ und „Install New Software“ hin?

Nach dem Entpacken und dem ersten Start sieht das „Help“-Menü folgendermaßen aus:

eclipsemarsfirst

Auch wenn ich Eclipse mehrmals schließe und wieder starte, ändert sich nichts. Doch sobald ich irgendein Plugin installiere, und Eclipse mich zum Neustart auffordert, verschwinden im „Help“-Menü alle wichtigen Menüpunkte:

eclipsemarssecond

Und sie tauchen auch nicht mehr auf. Neuinstallieren hilft, dann sind die Menüpunkte wieder da, bis sie irgendwann erneut verschwinden. Bis jetzt konnte ich nichts darüber herausfinden. Eclipse mit Administratorrechten zu starten, macht die Menüpunkte kurzzeitig sichtbar, aber nie wieder als normaler User, außerdem ist das kein befriedigender Workaround für diesen Fehler. Andere scheinen von diesem Problem ebenfalls betroffen zu sein, aber eine funktionierende Lösung oder eine Begründung dafür gibt es nicht.

Eclipse%20Mars

Im Büro hatte ich Eclipse zuerst mehr oder weniger versehentlich in einen Pfad mit Leerzeichen installiert. Sowas würde normalerweise gar nicht auffallen, da Programme seit mindestens 15 Jahren damit umgehen können, doch nicht Eclipse: Ein Ant-Build-Script ließ sich ums Verrecken nicht mehr ausführen, da die Eclipse-Ant-Version, die ohne ersichtlichen Grund von irgendeinem Additional Task im Zusammenhang mit SWT abhängig ist, die entsprechende JAR-Datei im Eclipse-Pfad nicht finden konnte. Die Fehlermeldung dazu sah ungefähr wie folgt aus:

The archive: C:\Program%20Files\Eclipse%20Mars\plugins\org.eclipse.swt.win32.win32.x86_64_3.104.0.v20150528-0211.jar which is referenced by the classpath, does not exist.

Stundenlanges Recherchieren im Netz brachte mich nicht weiter, nicht einmal die unnötige Abhängigkeit ließ sich rausnehmen, da der „Remove“-Button schlauerweise immer ausgegraut ist. Der Fehlermeldung konnte ich schließlich bei genauerem Hinsehen entnehmen, dass Ant das Leerzeichen im Pfad mit „%20“ kodieren wollte, was im lokalen Dateisystem nicht funktioniert. Eclipse-Ant versteht offenbar keine Leerzeichen. Das Umbenennen des Installationsverzeichnisses hat dann geholfen, aber eine Lösung ist das ja nicht. Schade um die vergeudete Zeit. Danke für nichts, Eclipse.

Nachtrag vom 29.06.: Inzwischen habe ich herausgefunden, dass dieser Fehler ein registrierer Bug in Eclipse 4.5 ist. Ich bilde mir also zum Glück noch nichts ein.

Zuhause überraschte mich mein eigenes Ant-Build-Script in Eclipse Mars neuerdings mit dieser Fehlermeldung:

No editor descriptor for id org.eclipse.ant.ui.internal.editor.AntEditor

Wenn ich die External Tools Configuration aufrufen will, hagelt es weitere Fehlermeldungen, z.B.:

Exception occurred creating launch configuration tabs

Reason:
No tab group defined for launch configuration type
org.eclipse.ant.AntLaunchConfigurationType

Und damit lässt sich das Build-Script weder vernünftig bearbeiten noch in irgendeiner Form ausführen oder konfigurieren. Wurde Eclipse-Ant heimlich aus der „Eclipse IDE for Java Developers“ entfernt? Eigentlich scheint Apache Ant 1.9.4 dem Paket wie erwartet beizuliegen, aber in der IDE selbst wurde jede Ant-Referenz entfernt. Google weiß zu dem Thema auch nichts. In Eclipse Luna hat das alles noch einwandfrei funktioniert. Beim erneuten Entpacken des Programms war Ant plötzlich wieder da – fragt sich nur wie lange noch. Egal woran es hängt, die Fehler gehen mir mächtig auf die Nerven, und ich hätte gerne, dass das behoben wird.

Cannot complete the install wegen was auch immer

Eclipse ist hässlich, aber zum Glück gibt es Abhilfe: Das Plugin „Jeeeyul’s Eclipse Themes“ lässt die Entwicklungsumgebung einigermaßen brauchbar aussehen und verbessert die Laune beim Arbeiten erheblich. Seit zwei Jahren bin ich ein echter Fan dieses Plugins, und so wollte ich auch Eclipse Mars damit ein wenig aufhübschen. Offenbar ist die Installation aber total schwierig:

Cannot complete the install because one or more required items could not be found. Software being installed: Jeeeyul’s Themes 2.3.0.I20150604-134826 (net.jeeeyul.eclipse.themes.feature.feature.group 2.3.0.I20150604-134826) Missing requirement: Jeeeyul’s Themes 2.3.0.I20150604-134826 (net.jeeeyul.eclipse.themes.feature.feature.group 2.3.0.I20150604-134826) requires ‚org.eclipse.xtend.lib 0.0.0‘ but it could not be found

Im Anschluss bietet der Eclipse Marketplace mir als mageren Ersatz eine hoffnungslos veraltete Version des Plugins an, die mit Eclipse Mars überhaupt nicht kompatibel ist und das Programm entweder im Betrieb zum Absturz bringt, oder erst gar nicht starten lässt, je nachdem ob die Theme bereits im Workspace hinterlegt war, oder erst nachträglich gewechselt wird. Der Eclipse Marketplace ist nicht nur völlig unfähig darin, eine bestimmte Abhängigkeit für mich aufzutreiben, wenn ich ein Plugin installieren will, er ist auch noch so unfähig, dass er mir eine total falsche Version installiert, die die Eclipse-Installation im Endeffekt unbrauchbar macht.

Wegen solch lästiger Kinderkrankheiten erwäge ich zum ersten Mal nach elf Jahren Eclipse endlich links liegen zu lassen, und es stattdessen doch mal mit einer professionellen Entwicklungsumgebung zu versuchen, die mich nicht mit Fehlermeldungen überhäuft und Menüpunkte versteckt.

Nachtrag vom 29.06.: Weiter gehts. Noch nicht einmal ein Update klappt richtig, wenn denn der Menüpunkt ausnahmsweise mal auftaucht:

Unable to read repository at http://download.eclipse.org/releases/mars.
No repository found at http://download.eclipse.org/technology/epp/packages/mars/.

Alles trieft, alles klebt, die Affenhitze hat Deutschland fest im Griff, und wochenlang gibt es keinen einzigen Tropfen Regen, der die Qual ein wenig lindern würde. Während ich bei bestimmt 40 Grad unterm Dach vor mich hin transpiriere und es seit letztem Monat kaum terminfreie Tage gab, versuche ich im Umzugsstress meinen Blog nicht komplett zu vernachlässigen, auch wenn ich dafür nur noch zwischen Tür und Angel mal die Möglichkeit habe. Aber es kommen wieder bessere Tage, dafür garantiere ich. Die Gelegenheit ist günstig für einen Füllbeitrag zum Thema „Warum Windows manchmal eben doch großer Mist ist“. Hier habe ich zwei skurrile Dinge gesammelt, die mir beim Arbeiten (oder Zocken) mit Windows sinnlos Probleme bereitet haben.

Fangen wir mit dem größten Übel an: Ein Problem mit Windows Server 2003, das scheinbar schon so manchem die Schuhe beim Gedanken daran auszieht. Ich wollte einen gerade unter Windows laufenden Java-Prozess mit Hilfe des Tools jstack.exe untersuchen. Üblicherweise ist das gar kein Problem, man muss eben nur Process-ID wissen, und die erfährt man mit dem tollen Windows-Befehl tasklist. Soweit alles noch in Ordnung. Als ich dann aber jstack mit besagtem Parameter ausführen wollte, erhielt ich diese völlig nichtssagende weil absurd falsche Fehlermeldung: „Not enough storage is available to process this command.“ (im deutschen Windows „Nicht genügend Server-Speicherplatz verfügbar, um diesen Befehl zu verarbeiten„).

Einwandfrei. Nicht genügend Arbeitsspeicher bzw. Swap-Speicher für die winzige jstack.exe auf einem eigentlich gut ausgestatteten Windows-Server? Nein, ich glaube eher nicht. Aber danke für deine unbrauchbare Hilfe, Windows! Ich fand eine Microsoft-Hilfeseite, die versucht das Problem näher zu erläutern und Problemlösungen zu bieten. Mit Betonung auf „versucht“, weil Microsoft grandios daran scheitert, denn schon die Fehlermeldung an sich ist einfach Quatsch. Auch eine deutsche Hilfeseite führte mit ihren Anweisungen nur komplett in die Irre.

Zum Glück kannte jemand auf Stackoverflow.com die Lösung. Man muss jstack mit Hilfe von „psexec -s jstack.exe pid“ aufrufen, damit es richtig auf dem Zielrechner ausgeführt wird. Das hat also genau gar nichts mit zuwenig Speicherplatz o.ä. zu tun, wie Windows mir weismachen wollte. Wenn man noch nicht einmal die richtige Fehlermeldung angezeigt bekommt, wenn schon ein Fehler auftritt, dann weiß ich nicht, worauf ich mich bei Windows sonst noch verlassen können soll.

Das zweite Problem ist dagegen ein eher kleines, kürzlich entdeckt und gelöst auf einer LAN-Party, also einem gesellschaftlichen Event zum gemeinschaftlichen Zocken netzwerkfähiger Windows-Spiele. Besonders nervtötend ist es, wenn das Windows-Netzwerk an sich fehlerfrei eingerichtet ist, es aber dennoch vereinzelt Spiele gibt, in denen immer derselbe LAN-Teilnehmer (=ich) die Spiele der anderen nicht sehen kann, und umgekehrt. Die Liste in der Lobby ist leer, obwohl alle anderen bereits dem offenen Spiel beigetreten sind. Man sucht sich also einen Wolf, auf der Suche nach dem einen Fehler, der dafür sorgt, dass man in manchen Spielen für alle anderen unsichtbar ist. Die Fehlersuche wird allein dadurch erschwert, dass das Problem nur manche Spiele betrifft, und auch dann noch nicht einmal immer.

lanadapterDas Problem wäre natürlich gar keines, wenn man in solchen Spielen einfach eine Ziel-IP zum Verbinden eingeben könnte, aber so einfach machen es einem die Entwickler nicht. Könnte womöglich manche Spieler überfordern. Des Rätsels Lösung lag dann in der Existenz weiterer LAN-Adapter, die unter Windows installiert waren: darunter der VirtualBox-LAN-Adapter, Tunngle, bei anderen findet man dort etwa Hamachi oder VMware. Alle diese Adapter müssten – auch wenn sie im Moment nicht benutzt werden – explizit deaktiviert werden, weil die Spiele sonst in Versuchung kommen könnten, diese für die Netzwerkverbindung mit den anderen Spielern zu verwenden, anstelle des eigentlich höher priorisierten richtigen LAN-Adapters.

Ich dachte bis heute morgen noch, ich sei mittlerweile lange genug Java-Entwickler, um vor solchen blöden Fehlern gefeit zu sein. Stellt sich heraus, dass man wirklich viel Zeit mit sinnloser Fehlersuche selbst in simpelstem Code verschwenden kann.

Heute schrieb ich etwas in meiner favorisierten Java-IDE Eclipse, das ich in der Art praktisch täglich unzählige Male schreibe:

List<String> myList = new ArrayList<String>();

List und ArrayList wurden mir rot unterstrichen, weil er die Klassen nicht kannte. Es dauert natürlich nur wenige Klicks und Eclipse generiert die fehlenden Imports blitzschnell. So weit so normal. Doch dann wird mir List erneut rot unterstrichen, mit der Fehlermeldung „The type List is not generic; it cannot be parameterized with arguments <String>„.

Ungläubig starrte ich die Fehlermeldung an. Ich war mir eigentlich total sicher, dass List Generics verwendet. Sicherer ging es fast nicht. Die Fehlermeldung sagte also genau das Gegenteil von dem aus, was meiner Ansicht nach den Tatsachen entsprechen sollte. Oder doch nicht? Plötzlich begann ich zu zweifeln. Werde ich etwa schon senil? Wieso ist ArrayList parametrisierbar, aber List auf einmal nicht? Ist das irgendwie sinnvoll?

Ich begann hilflos, die Zeile irgendwie zu modifizieren. War List auf einmal allergisch gegen String geworden? Nein, daran lag es nicht, auch andere Parameter nahm er nicht an. Ich hätte den Parameter weglassen können, oder ich hätte auch direkt ArrayList anstelle von List verwenden können, das hätte funktioniert, aber Eclipse sollte mich doch nicht etwa dazu kriegen, die wichtigsten Programmierparadigmen zu vergessen. Ich vermutete, dass Eclipse einfach mal wieder seine Tage hatte und mich zu Unrecht irgendwelcher Anfängerfehler beschuldigte. An der Zeile war alles in Ordnung, postulierte ich.

Ich begann also doch das Orakel von Google zu bemühen, weil ich offenbar außer Stande war, mir selbst bei solch einem trivialen Problem zu helfen. Eine Quelle behauptete nun, dass es wohl mit dem Compliance-Level des Compilers zu tun hatte, das versehentlich auf eine Version vor Java 1.5 gestellt sein musste, also bevor Generics in Java eingeführt wurden. Ein kurzer Blick in die Compiler-Optionen des Projekts widerlegte das. Mit dem Compliance-Level war alles in Ordnung. In Zukunft also wieder auf konkrete Implementierungen programmieren?

Zum Glück nicht, denn des Rätsels Lösung fand ich direkt im Anschluss, und ich bin erschrocken über die Tatsache, dass ich an dieser Stelle vielleicht erst ganz zuletzt gesucht hätte. Ich habe mich bei den Imports entweder verklickt oder Eclipse hat mich einfach nur auf den Arm nehmen wollen. Als ich List importieren wollte, habe ich wie automatisch die oberste Option ausgewählt, weil das in dem Fall normalerweise immer funktioniert. Ausnahmsweise dachte Eclipse, es wäre besonders witzig wenn ganz oben die wenig bekannte java.awt.List stehen würde, anstelle der sehr viel häufiger genutzten gleichnamigen Klasse java.util.List.

Nun, die AWT-List verwendet tatsächlich keine Generics, Eclipse hat also Recht behalten. Aber der Fehler ist so dämlich, dass es mir eine Lehre war, die Imports allzu leichtfertig zu handhaben. Künftig prüfe ich höchstpersönlich jede einzelne importierte Klasse auf Richtigkeit.