effiziente Möglichkeit, Debug / Log-Anweisungen in Code zu setzen - so beeinflussen sie nicht die Laufzeit

7

In C-derivativen Sprachen gibt es die Möglichkeit, bedingten Code für Debug und Runtime zu haben. Auf diese Weise gibt es keinen Overhead in der Laufzeit.

Wie würde ich das mit Java / Android und den Log.i-Anweisungen machen? Wenn ich nur einen konstanten globalen boolean debugOn verwende, der offensichtlich die redundanten Checks in der Laufzeit hinterlässt.

Was ist der beste Ansatz für bedingte Log-Anweisungen ?

Vielen Dank

BEARBEITEN:

Da es einige Kommentare gibt, die der angenommenen Antwort folgen, poste ich meine Schlussfolgerung hier ....

%Vor%

... genau wie in xCode:)

    
user387184 08.11.2011, 13:03
quelle

3 Antworten

17

Android Build System hat vor einiger Zeit eine Konstante BuildConfig.DEBUG zur Verfügung gestellt, also schlage ich vor sie zu benutzen und den Code so zu schreiben:

%Vor%

Es werden keine redundanten Prüfungen durchgeführt, da es eine Konstante ist. Dieser Code wird auch vom Compiler optimiert, aber Sie haben auch ProGuard zur Verfügung. Selbst wenn die Kontrollen vorhanden sind, sollten mögliche Auswirkungen auf die Leistung vernachlässigbar sein.

Dieser Ansatz hatte den Nachteil, dass Sie diese Konstante entweder manuell oder über eine benutzerdefinierte Regel in der Build-Datei selbst bearbeiten mussten. Jetzt wird dies jedoch automatisch vom Build-System übernommen, so dass Sie nichts selbst tun müssen.

    
Malcolm 08.11.2011, 13:06
quelle
2

Erstellen Sie Ihre eigene Log-Klasse, indem Sie die Log-Klasse erweitern, die statische Variable debugLevel darin erstellen, eigene Methoden und Bezeichnungen wie INFO, DEBUG usw. erstellen.

ändert jetzt den Wert von static varable debugLevel und spiegelt die gesamte Anwendung wider.

also keine Notwendigkeit für (Debug) überall.

    
quelle
1

Java hat keine C-ähnliche bedingte Kompilierung, es sei denn, Sie implementieren es selbst. (Es ist nicht so schwierig, aber IMO ist es nicht die Mühe wert.)

Ihre Möglichkeiten sind ziemlich begrenzt. Das Beste, was Sie tun können, ist teure Protokollierungsanweisungen in ein isLoggable zu packen.

%Vor%

Bei kurzen Log-Anweisungen ist es mehr Rauschen als es wert ist.

Bearbeiten Malcolm könnte Recht haben (obwohl ich mich wahrscheinlich immer noch nicht darum kümmern würde.)

Bearbeiten Der Vergleich mit einem statischen DEBUG ist immer noch im Byte-Code; ProGuard sollte die unnötige Verzweigung entfernen. Ohne ProGuard wäre es die JIT oder die Compiler-Implementierung.

    
Dave Newton 08.11.2011 13:11
quelle

Tags und Links