Quellcode nach bestimmter Ausgabe durchsuchen

onkel89

Mitglied
Hallo, ich hoffe mit kann jemand helfen ;-)
also ich habe ein Java Projekt meiner Uni bekommen, an dem ich weiter arbeiten soll. Es handelt sich um ein 3D Render Program, dass ein anderer geschrieben hat. Ich komme damt auch recht gut zurecht, nur gibt die Console alle 5 Sekunden die aktuelle fps und die Gesamtanzahl an Frames aus. Ich wollte nun die Ausgabe auf jede Sekunde setzten und das ganze in eine Datei schreiben. Leider finde ich nirgends in den vielen Klassen, wo denn die Ausgabe passiert. Ich habe alles schonmal durchgeschaut doch finde nichts. Gibt es irgendwelche Tipps wie man viele Klassen danach durchsuchen kann? Ich hab auch schon den Debug Modus versucht, aber da find ich auch keine Variablen die diese Werte haben. Als ob nirgends so eine Ausgabe statt findet :bahnhof:
Wäre echt cool wenn jemand Tipps hätte wie man danach am besten Sucht. Zur Not muss ich wohl doch jede Klasse nochmals abgehen was bei dem Komplexen Projekt ewg dauern würde.
viele Grüße
 

tfa

Top Contributor
Ich hoffe du verwendest eine IDE. Damit kann man ganz einfach sämtlich Quelltext nach beliebigen Strings durchsuchen. Bei Eclipse geht das z.B. mit Search->File
 
F

Firephoenix

Gast
Wenn man esordentlich macht (und es ein handelbarer Aufwand ist) könntest du noch versuchen denjenigen der das Projekt betreut davon überzeugen das Projekt auf z.b. slf4j oder log4j umzustellen oder dir zu erlauben es umzustellen.
Der Einrichtungsaufwand hält sich in Grenzen und jedes
Java:
}
//...
System.out.println("Mein Logeintrag");
//...
}

durch (Beispiel Log4j)

Java:
private static final Logger log = Logger.getLogger(Klassenname.class);
}
//...
log.debug("Mein Logeintrag");
//...
}

zu ersetzen ist je nach Projekt ein brauchbarer Aufwand (möglich wäre es z.B. auch einfach jedes "System.out.println(" durch "log.debug(" zu ersetzen, die entsprechende Deklaration des Loggers in jeder Klasse einfügen die dannach nicht mehr compiliert (mit dem korrekten Klassennamen für den Logger) und dannach einmal im kompletten Projekt von der IDE die importe aufräumen zu lassen.

Besonders schön finde ich bei beiden Frameworks wie leicht man die Ausgabe manipulieren kann
(Meine Konsolenausgabe habe ich z.b. so formatiert und lasse mir parallel noch ein ordentliches html-dokument mit farbigen Einträgen generieren ohne das ich dafür meinen Code ändern muss).
Code:
---DEBUG--- <2012-10-07 09:43:59,797> [main] |package1.packag2.Klassenname| --> Mein Logeintrag

Hier ist eine Einleitung zu log4j und zu slf4j (ich verwende derzeit log4j, würde aber in größeren Projekten eher slf4j als log4j empfehlen).

Apache log4j 1.2 - Short introduction to log4j
SLF4J Manual

Gruß
 

onkel89

Mitglied
Hallo, also ich benutze Eclipse. Habe auch schon die Suchfunktion benutzt nur leider bei System.out nichts gefunden, zumindest nicht was ich suche. Auch nicht wenn ich Teile der Ausgabe suche, wie z.B "total" oder "fps" kommt nichts. Den eigendlichen Programmierer zu finden wird schwer, sonst könnte ich ihn auch einfach fragen ;-) Ich hab auch klassen wie Logger, nur da wird auch was anderes ausgegeben.. Man müsste doch im Debug Modus irgendein String sehen der dann diese Zeile beinhaltet, die ausgegeben wird, oder seh ich da irgendwas falsch ?
 
F

Firephoenix

Gast
Wenn du im Debug-Modus durchgehst musst du auf alle Fälle an der Ausgabestelle vorbei.
Möglich wäre aber, das die Ausgabe z.B. aus einer eigenen eingebundenen lib kommt, oder das die Strings nicht hart im Code stehen sondern z.B. über eine Übersetzungs-Library eingelesen werden (halte ich beim System.out.println() ) aber für unwahrscheinlich ^^.
Das würde aber erklären warum die Suchfunktion in Eclipse nichts findet (ich gehe mal davon aus das du diese korrekt verwendest).
Gruß
 

onkel89

Mitglied
also was vielleicht noch hilfreich ist, dass die Ausgabe auf der Console in rot ist, also nicht wie normal System.out.print in schwarz. Gibt es noch andere Methoden für eine Ausgabe ? System.err ist es auch nicht..
 
S

Spacerat

Gast
Wie wär's mit dem Holzhammer-Programm? Wenn du weisst, wo das Programm gestartet wird, kannst du dort als ersten Aufruf mit "System.setOut(yourPrintStrem)" jegliche Ausgaben abfangen. Analog dazu gibt es auch noch "System.setIn()" und "System.setErr()". Aber wie gesagt: Holzhammer-Programm - das bedeutet, andere Vorschläge sind richtiger.
Sicher gibt es noch andere Wege, in die Konsole zu schreiben; native oder sogar per Holzhammer-Programm, wenn man z.B. gleich in "myPrintStream" statt in "System.out" schreibt. Ein Grund, warum das Ganze nicht allzu sauber ist. Dann wäre da noch der direkte OutputStream der Anwendung, aber an diesen kommt man afaik nicht ohne weiteres (glaub' nur per SelfRestart der Anwendung über "Runtime.getRuntime().exec()") ran (BTW.: was macht eigentlich die Klasse "java.io.Console"?).
Aber immerhin kann man in Eclipse (in anderen IDEs denk' ich geht das auch) nach den ausgegebenen Zeichenketten suchen, im Quelltext, Ressourcedateien und sogar im Code. Wer keinen Quelltext hat, erstellt sich halt einen -> JD | Java Decompiler
Wenn man allerdings nur in ".java"-Dateien sucht, findet man z.B. kaum externalisierte (lokalisierte) Zeichenketten.
 
Zuletzt bearbeitet von einem Moderator:
F

Firephoenix

Gast
Hab da mal was kleines zusammengeschnipselt :)

Java:
public class Main {

	public static void main(String[] args) {
		System.setOut(new PrintlnFinder(System.out));
		new Test();
	}
}

Java:
public class PrintlnFinder extends PrintStream {

	public PrintlnFinder(OutputStream out) {
		super(out);
	}

	public void println(String line) {
		super.println(line);
		try {
			throw new Exception();
		} catch (Exception e) {
			super.println("Printed by: "
					+ e.getStackTrace()[1].getClassName() + "."
					+ e.getStackTrace()[1].getMethodName() + "()!");
		}
	}

}

Java:
public class Test {

	public Test(){
		print();
	}

	private void print() {
		System.out.println("Test-print");
		
	}
}

Ausgabe:
Test-print
Printed by: invokingfinder.Test.print()!

Gruß
 
Zuletzt bearbeitet von einem Moderator:

onkel89

Mitglied
Hey, cool danke für deine Mühe ! Leider geht auch da nichts :-(
Komisch auch dass ich in einer Methode mit System.out.println die Objekte ausgebe, die ich der Scene hinzugefügt habe. Hier wird auch nicht dazu geschrieben woher es kommt :-(
Es gibt auch ne Api zu dem Projekt, jedoch bin ich da auch nicht fündig geworden..
Generated Documentation (Untitled)
 
F

Firephoenix

Gast
Wäre es möglich das vielleicht eine printf, print oder andere println-Methode verwendet wird als println(String)?
Oder kommt die Ausgabe evtl sogar über System.err?

Meine Implementierung deckt so natürlich nur das "normale" println(String) ab.

Gruß
 
S

Spacerat

Gast
Sorry... kann grad' nicht mehr vor lachen...
GuitarHeroInsertedEvent
:lol: sollte das nicht besser 'ne Exception sein?

Nein mal im ernst. Die Doku nutzt einem in sofern nichts, weil man dadurch nicht drauf kommt, in welchen der unzähligen Methoden eine bestimmte Ausgabe erfolgt. Wenn du sämtliche Quelltexte und Ressourcen, die für den Build benötigt werden, wirst du die Zeichenkette definitiv finden, wenn du in allen Projektdateien suchst, es sei denn, ein Textcontainer wäre verschlüsselt, was aber recht unscheinbar wäre.
Was mir grad' noch auffällt... wo genau erscheint die Ausgabe rot, nur in Eclipse oder auch im cmd? Wenn's im cmd rot erscheint, dann ist die Ausgabe Steuercodes (ANSI) gesteuert und das wäre mit System.out / -err afaik nur umständlich zu realisieren.
 

onkel89

Mitglied
hm, naja ich werde mich mal bei meinem Prof schlau machen sobald er wieder erreichbar ist, vielleicht weiß er ja ne Lösung. Sonst bleibt mir wohl nichts anderes als das komplette Projekt durchzugehn. Trotzdem danke für die schnelle Hilfe !:)
 

Marco13

Top Contributor
Versuch' nochmal das von Firephoenix, aber mit
System.setErr(new PrintlnFinder(System.err));
(statt setOut/System.out)

EDIT: Wenn das nicht hilft, kann man noch runtergehen und "write(byte)" vom OutputStream überschreiben :hihi:

EDIT2: Schau auch mal ob du referenzen zur Klasse Benchmark findest.
 
Zuletzt bearbeitet:

onkel89

Mitglied
Danke für deine Tipps, das hat leider auch nichts gebracht ;-(
Aber ich weiß jetzt wo es her kommt ;-) Es ist eine Methode der OpelGl lib. Hier kann man mit der Methode enablePerfLog die Ausgabe an- und abschalten. Verwendet wird Jogl2.0.
Hier der Link : GLWindow (JOGL, NativeWindow and NEWT APIs)
Leider finde ich nirgends etwas um den perfLog?? zu manipulieren, also von 5 Sekunden auf eine Sekunde und die ausgabe zu verändern. Was ich noch gefunden habe ist die Klasse Animator mit dem Interface FPSCounter. FPSCounter (JOGL, NativeWindow and NEWT APIs)
Hier scheint man auch einiges machen zu können. Kennt sich jemand zufällig damit aus?
Ich habe eine Klasse in der ein GLWindow erstellt wird. Dort wird auch die Methode enablePerfLog aufgerufen. Leider kann ich aber nicht auf den Animator zugreifen, weil da imemr eine NullPointerException auftritt, also wurde es ja nicht initialisiert, richtig ?
Wenn ich aber mit
Java:
Animator anim = new Animator(window);
       anim.start();
       anim.getTotalFrames();
einen FPSAnimator erzeugen will, gibt es einen Fehler:
Exception in thread "Timer-0" javax.media.opengl.GLException: Error: Attempt to make context current on thread Thread[Timer-0,5,main] which is already current on thread Thread[main,5,main]
window ist hierbei eine Instanz von GLWindow.
Habt ihr da zufällig auch einen Rat ?:D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
amelie123456 Objekt Farbe Quellcode Java Basics - Anfänger-Themen 4
M Mein quellcode wird nicht in der Konsole ausgegeben Java Basics - Anfänger-Themen 3
jhCDtGVjcZGcfzug Was genau ist mit diesem Quellcode gemeint? Java Basics - Anfänger-Themen 5
jhCDtGVjcZGcfzug Was ist mit diesem Quellcode gemeint? Java Basics - Anfänger-Themen 3
J Wie bestehenden Quellcode in IDE richtig übernehmen Java Basics - Anfänger-Themen 27
TimoN11 IntelliJ , Ausgabe von einem Quellcode in Eingabe eines Quellcodes Java Basics - Anfänger-Themen 1
H Quellcode Scanner Klasse Java Basics - Anfänger-Themen 2
P Quellcode LinkedList Java Basics - Anfänger-Themen 2
M Bitte um Hilfe bei Quellcode (Rekursion) Java Basics - Anfänger-Themen 6
F Quellcode wird nicht in cmd angezeigt Java Basics - Anfänger-Themen 8
N Erste Schritte Quellcode fehlerhaft Java Basics - Anfänger-Themen 2
J Methoden Quellcode DP Fibonaaci erklärt Java Basics - Anfänger-Themen 5
L Fehler in Quellcode?! Java Basics - Anfänger-Themen 3
D Generics ArrayList: Bug im Quellcode Java Basics - Anfänger-Themen 14
G Wie kann ich mein Quellcode als Programm vom desktop starten? Java Basics - Anfänger-Themen 1
Hacer Quellcode lesen Java Basics - Anfänger-Themen 13
M Greenfoot World und Actor Quellcode Java Basics - Anfänger-Themen 13
B Quellcode einelsen "line by line" (und abspeichern in file (txt) Java Basics - Anfänger-Themen 7
G Quellcode verstehen Java Basics - Anfänger-Themen 9
F Quellcode optimieren... Java Basics - Anfänger-Themen 4
M Verstehe das Programm(Quellcode) nicht!! Java Basics - Anfänger-Themen 12
U Java Quellcode Schaltjahr Java Basics - Anfänger-Themen 13
D Quellcode verstehen Java Basics - Anfänger-Themen 4
G Quellcode "splitten" Java Basics - Anfänger-Themen 6
V Array ermitteln - in Quellcode speichern Java Basics - Anfänger-Themen 15
J Quellcode von einem Link kriegen? Java Basics - Anfänger-Themen 3
W Datentypen String in Quellcode umwandeln Java Basics - Anfänger-Themen 25
J Java-Quellcode Java Basics - Anfänger-Themen 13
J Tabelle aus Website einlesen [nicht im Quellcode] Java Basics - Anfänger-Themen 6
T Quellcode zur .jar oder .exe Java Basics - Anfänger-Themen 7
D Verbesserungsvorschläge zum Quellcode Java Basics - Anfänger-Themen 15
P Suche Java Programme mit gutem/anfängertauglichem Quellcode Java Basics - Anfänger-Themen 8
M Quellcode kann nicht kompiliert werden Java Basics - Anfänger-Themen 6
S Grafische Oberfläche Quellcode ändern Java Basics - Anfänger-Themen 8
T Quellcode zu Jar? Java Basics - Anfänger-Themen 14
S Erste Schritte Fakultät Quellcode Java Basics - Anfänger-Themen 12
E Quellcode Erklärung Java Basics - Anfänger-Themen 8
N Feste Hardcodierte Pfade im Quellcode Java Basics - Anfänger-Themen 6
S Allgemein: Quellcode einrücken Java Basics - Anfänger-Themen 8
W Kurzer Quellcode klein aber oho! Java Basics - Anfänger-Themen 7
H frage zu meinem quellcode Java Basics - Anfänger-Themen 10
M String in Quellcode umwandeln Java Basics - Anfänger-Themen 9
S Textfragmente aus Quellcode lesen und abspeichern Java Basics - Anfänger-Themen 2
U Netzwerk Chatprogramm Quellcode funktioniert nicht Java Basics - Anfänger-Themen 6
A Quellcode aus diesem Forum für komerzielle Zwecke/Bachelor Thesis? Java Basics - Anfänger-Themen 4
F Datei Quellcode Java Basics - Anfänger-Themen 8
W Hilfe bei Interpretation von Quellcode Java Basics - Anfänger-Themen 8
X Webseite auslesen ohne Quellcode zu splitten Java Basics - Anfänger-Themen 3
A log4j - wie kann ich im Quellcode initialisieren statt in der properties-Datei? Java Basics - Anfänger-Themen 2
N Quellcode absichern? Java Basics - Anfänger-Themen 21
M mit java quellcode im browser öffnen Java Basics - Anfänger-Themen 1
hdi Programmier-Stil : Speicher vs. Quellcode Java Basics - Anfänger-Themen 67
M Quellcode verbessern Java Basics - Anfänger-Themen 6
M Brauche Hilfe beim Verstehen vom Quellcode Java Basics - Anfänger-Themen 4
I Kann nicht compilieren warum? Bei großen Quellcode. Java Basics - Anfänger-Themen 8
A Änderung im Quellcode > javac > keine Änderung in Kons Java Basics - Anfänger-Themen 6
C Quellcode richtig bisher? wie gehts weiter? Java Basics - Anfänger-Themen 13
S Problem mit url, inputStream und bytes beim Quellcode laden. Java Basics - Anfänger-Themen 6
D quellcode in webseite einbinden Java Basics - Anfänger-Themen 7
B Kann Quellcode von "Hanoi" nicht verstehen. Bitte Java Basics - Anfänger-Themen 4
D Fragen zu Quellcode QuickSorter Java Basics - Anfänger-Themen 13
F Quellcode & Ausgabe Java Basics - Anfänger-Themen 6
M Java Quellcode in eine exe datei umwandeln Java Basics - Anfänger-Themen 4
G Quellcode kommentieren Java Basics - Anfänger-Themen 6
S html quellcode runterladen Java Basics - Anfänger-Themen 2
D Quellcode richtig lesen lernen Java Basics - Anfänger-Themen 8
S Von einer jar.Datei den Quellcode. Java Basics - Anfänger-Themen 1
A Jar Datei im Quellcode einbinden Java Basics - Anfänger-Themen 3
G Problem mit Quellcode! Java Basics - Anfänger-Themen 15
D Import von Quellcode Java Basics - Anfänger-Themen 2
H Wo in GUI-Klasse bringe ich Quellcode unter? Java Basics - Anfänger-Themen 8
M Verstehe den Quellcode nicht ganz Java Basics - Anfänger-Themen 3
O mathematische Formel in quellcode Java Basics - Anfänger-Themen 5
M Quellcode einschränken?! Java Basics - Anfänger-Themen 6
L Fehler im simplen Quellcode! Java Basics - Anfänger-Themen 2
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
T sortierung der eingabe nach größe Java Basics - Anfänger-Themen 5
G Bei dynamischer Arrayliste nach jeder Auswahl Zahl entfernen Java Basics - Anfänger-Themen 3
ptcho Werte/Position nach dem Funktionsaufruf tauschen? Java Basics - Anfänger-Themen 1
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
W LocalDate toString und nach Split falsch "erkannt"? Java Basics - Anfänger-Themen 8
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
I Java Mail Timeout erst nach rund 5 Minuten? Java Basics - Anfänger-Themen 9
FireHorses Einen Command erst nach einer Chateingabe aktivieren Java Basics - Anfänger-Themen 1
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
Jambolo Karten sortieren nach Rang und Farbe Java Basics - Anfänger-Themen 5
Lion.King Subtraktion nach Eingabe im Terminal Java Basics - Anfänger-Themen 7
D Programmieren nach UML Java Basics - Anfänger-Themen 2
rosima26 Java nach letzter Ziffer sortieren Java Basics - Anfänger-Themen 19

Ähnliche Java Themen

Neue Themen


Oben