[JAVA] IDE und Maven werden mit allen Debug-Informationen kompiliert

javac hat eine Option namens -g. Dies ist eine Option, um Debug-Informationen in die Klassendatei aufzunehmen und umgekehrt.

-- -g: lines enthält die Zeilennummer des Quellcodes -- -g: vars enthält die Informationen zum lokalen Variablennamen

Angenommen, Sie haben Code wie den folgenden javac -g Hello.java.

public class Hello {
    public String say(String name) {
        return "hello ".concat(name);
    }
}

Dann gibt javap -l Hello Folgendes an: ( -l ist eine Option zum Drucken der Zeilennummer und der lokalen Variablentabelle):

Compiled from "Hello.java"
public class Hello {
  public Hello();
    LineNumberTable:
      line 1: 0
    LocalVariableTable:
      Start  Length  Slot  Name   Signature
          0       5     0  this   LHello;

  public java.lang.String say(java.lang.String);
    LineNumberTable:
      line 3: 0
    LocalVariableTable:
      Start  Length  Slot  Name   Signature
          0       7     0  this   LHello;
          0       7     1  name   Ljava/lang/String;
}

Die LineNumberTable enthält die Zeilennummer, die LocalVariableTable enthält den lokalen Variablennamen und dieCompiled from ~enthält den Namen der Quelldatei.

Was ist, wenn javac -g: none Hello.java? Hier ist das javap -l Hallo.

public class Hello {
  public Hello();

  public java.lang.String say(java.lang.String);
}

Es enthält keine Debug-Informationen.

Wir machen normalerweise nicht explizit "javac" und kompilieren mit IDEs wie Eclipse und IntelliJ IDEA oder Maven. Sie sollten jedoch in der Lage sein, beim Betrachten des Variablennamens einen Schritt durchzugehen, indem Sie den entsprechenden Quellcode öffnen, ohne sich beim Debuggen darum kümmern zu müssen. Das bedeutet, dass IDE und Maven standardmäßig Debug-Informationen enthalten.

In Eclipse können Sie festlegen, ob Debug-Informationen enthalten sein sollen. Ich habe versucht, den Standardstatus zu drücken. Es enthält jetzt "vars", "lines" und "source".

eclipse.png

Ich weiß es nicht, weil ich IntelliJ IDEA nicht verwende, aber ich denke, ich kann wahrscheinlich ähnliche Einstellungen vornehmen.

Maven kann auch festlegen, ob Debug-Informationen Debuggen des Maven-Compiler-Plugins enthalten sein sollen.

Wenn Sie "javac Hello.java" verwenden, werden übrigens der Name der Quelldatei und die Zeilennummer angegeben. Mit anderen Worten, es ist standardmäßig dasselbe wie javac -g: source, lines Hello.java.

Um das Obige zusammenzufassen,

--javac enthält Debug-Informationen in der Klassendatei mit der Option -g

Es bedeutet das.

Recommended Posts

IDE und Maven werden mit allen Debug-Informationen kompiliert
Führen Sie Maven unter Java 8 aus, während Sie unter Java 6 kompilieren und unter Java 11 testen
Hallo Welt mit GWT 2.8.2 und Maven
Ich wollte einen AP-Server starten und nur mit dem Befehl Maven debuggen
Greifen Sie mit ssh auf den Circle CI Docker-Container zu und debuggen Sie ihn