2017-04-12 3 views
1

Ich habe ein Hallo Welt-Programm namens A.Class. Es wurde mit dem Befehl javac A.java kompiliert. Alles, was es tut, ist Drucken "Hallo Welt".Wie man Java-Compiler erzeugt Zeilennummern in kompiliertem Code

Als nächstes kompilierte ich mit javac -g A.java. Ich erwarte Zeilennummern, kann aber nicht sehen. Irgendeine Idee, was passiert ist?

Ich sehe sehr kleine Unterschiede in einigen Arten von Sonderzeichen zwischen .class-Datei von javac kompiliert und javac -g kompiliert. Aber ich kann keine Zeilennummern sehen.

Meine Neugier dafür ist, weil ich herausfinden möchte, welche Art von Auswirkungen Zeilennummern auf Leistung haben können. Zweitens möchte ich wissen, wie log4j etc Zeilennummern für die Protokollierung pflegen. Vielen Dank.

+3

-g dient zum Generieren von Debuginformationen. Klassendateien sind Bytecode, nicht lesbar. Sie können javap verwenden, um eine Klassendatei zu zerlegen. – OldProgrammer

+1

Haben Sie tatsächlich den Inhalt der Datei '.class' in die Frage eingefügt? Hast du das wirklich gemacht? Und wenn ich fragen darf, warum hast du es zweimal getan? –

+0

Erste ist mit javac. Der zweite ist mit javac -g <<< kompiliert. Beachten Sie das "g". Keine Zeilennummer! Javap ist großartig, aber immer noch keine Zeilennummer! –

Antwort

3

Der Kompilierbefehl ist gut, -g aktiviert die Generierung von Debuginformationen. BTW: Zeilennummern werden standardmäßig generiert, brauchen -g:none oder ähnliches, um dies auszuschalten.

Was fehlt, ist eine Möglichkeit, die generierte .class Datei zu überprüfen, ähnlich wie ein Tool es verwenden würde. Versuchen:

$ javap -l -c A.class 

-l schaltet das Drucken von Zeilennummer Tabellen. -c schaltet das Drucken von disassemblierten Bytecode-Anweisungen ein (möglicherweise interessant, da Zeilenzahltabellen Quellzeilennummern auf Bytecode-Anweisungen beziehen).

Verwandte Themen