Ausgabe der Quelltext Zeilennummer?

Status
Nicht offen für weitere Antworten.

Joern

Mitglied
Hallo Java-Gemeinde

Ich habe jetzt bis zum Erbrechen gegoogelt und meine Java-Bücher durchgesehen und nichts gefunden:

Ist es möglich die Sourcecode Zeilennummer auszugeben oder die Compilezeit? Und wie?
Da es beim Programmabbruch(Stacktrace) ausgegeben wird, müsste der Zugriff auf die Zeilennummer doch auch so irgendwie möglich sein? Und wo finde ich diese Info's?

Also, vielen Dank für jede Hilfe

Jörn
 
Hallo,

Mir reichts auf der Konsole ... System.out.println( .... )
Compilezeit ist ja wohl die Zeit als der "javac" über das Programm gelaufen ist und das .class file erstellt hat.
( von dem .class file könnte ich natürlich die Systemzeit auslesen, aber in C++ gibt es für die Compilezeit einfache Compiler Variablen/Konstanten und warum sollte es die nicht auch in Java geben? ) Wie bestimme ich die Version des Compilers gehört wohl in die gleiche Kategorie ( z.B. wenn man ein Programm als Source weitergibt und will verhindern dass es mit einer nicht "passenden" Compilerversion übersetzt wird.

Jörn
 
1. Zeilennummern sind nur vorhanden wenn mit vollen Debuginformationen kompiliert wird.
2. Nimm das Erstellungsdatum der Datei
3. Was ist denn eine nicht passende Compilerversion?
 
Hallo Wildcard

>>> 1. Zeilennummern sind nur vorhanden wenn mit vollen Debuginformationen kompiliert wird. <<<
und wie greift man dann darauf zu ???

>>>3. Was ist denn eine nicht passende Compilerversion?<<<
Nicht das ich das Problem jetzt hätte und es war eigentlich auch nur gedacht (wenn es jemand bekannt gewesen wäre) um an eine Stelle der Dokumentation zu kommen wo eben auch was mit den Zeilennummern steht, aber da es ja wohl mehrere Java-Compiler gibt (Sun, IBM, Borland) ist es ja durchaus wahrscheinlich, das ein Programm sich auf dem einen compilieren lässt aber nicht auf einem anderen. Um so etwas zu umgehen ist es schön, wenn man nach dem Compiler "fragen" kann.

Jörn
 
Die Java Version bekommst du mit System.getProperty("java.version") (Hersteller: "java.vendor")

Den Stacktrace bekommst du mit Throwable#getStackTrace.
Daraus könntest du die Zeilennummer mit regex rausfiltern: "(?<=\\.java🙂[\\d]+" *
Das funktioniert aber nicht, wenn keine Debugging Info generiert wurde (wie Wildcard schon sagte).

EDIT: * besser: mit getLineNumber holen :wink:
 
Hallo André

Vielen Dank erst mal für diese Info.
Fürs Debugging wärs ganz schön, wenn man die Zeilennummer mit ausgeben könnte -wo- eine Debugging Message generiert wurde.

So weiss ich jedenfalls dass es wohl nicht eine ganz einfache Option gibt, um diesen Wert zu bestimmen.

Vielleicht fällt irgendeinem ja noch was einfaches ein?

Jörn
 
Joern hat gesagt.:
..Vielleicht fällt irgendeinem ja noch was einfaches ein?..
Versuch's mal mit StackTraceElement#getLineNumber:
Code:
//returns line number if debugging info is generated (else returns -1):
int zeilenNummer = new Exception().getStackTrace()[0].getLineNumber();
 
Warum loggst du nicht den StackTrace. Da stehen die Zeilennummern (sofern vorhanden) direkt drin und in einer IDE kannst du ihn einfach in die Stack Trace Konsole kopieren und dann zur entsprechenden Stelle springen.
Zu lange C programmiert, oder warum versuchst du das Rad neu zu erfinden?
 
Ein log wertest du ja nicht zur Laufzeit aus, sondern bekommst es i.d.r. vom Kunden.
Wenn du einfach den Stacktrace loggst, kannst du das Ding per Copy/Paste zB in die Eclipse StackTraceKonsole kopieren.
Die Konsole parst den Inhalt und macht aus den einzelnen StackElements Hyperlinks mit denen du in den Source-Code springen kannst.
Warum also selbst die Zeilennummern besorgen wenn der StackTrace es genauso tut?
 
Ich arbeite zur Zeit ohne IDE. Warum? Bin/War Einsteiger in Java und enormer Zeitdruck

Ich bin am Entwickeln eines komplexen Programmes und nicht bei der Wartung eines existierenden Programmes.
Daher benötige ich immer "Wegmarken" die mir die zwischenzeitliche Richtigkeit eines berechneten Zwischenergebnisses bestätigen.

Vielen Dank aber auch gerade für André für den Einzeiler.

Jörn
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben