Anwendungsfall: Code debuggen und Fehler beheben

Sie können Gemini Enterprise verwenden, um nicht funktionierenden Code zu debuggen und Fehler zu beheben.

Beispiel-Prompt

Geben Sie im Chatfeld einen Prompt wie den folgenden ein:

I'm getting a NullPointerException in this Java code. Can you analyze the stack
trace, identify the likely cause, and suggest a fix? Can you also help me debug
this issue by simulating different inputs?

Beispielausgabe

Als Antwort auf diesen Prompt gibt Gemini Enterprise eine Ausgabe aus, die in etwa so aussieht:

Natürlich! Dabei kann ich dir auf jeden Fall helfen. NullPointerException Lass uns das Problem aufschlüsseln und eine Lösung finden.

Analyse des Fehlers

Der von Ihnen bereitgestellte Stacktrace ist der Schlüssel zum Verständnis des Problems:


  Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Address.getStreet()" because the return value of "User.getAddress()" is null
  at MyClass.main(MyClass.java:8)
  

Das bedeutet Folgendes:

  1. java.lang.NullPointerException: Das ist der Fehler. Das passiert, wenn Sie versuchen, eine Referenz zu verwenden, die keinem Objekt zugewiesen wurde. Sie verweist also auf null.
  2. Cannot invoke "Address.getStreet()": Das Programm ist fehlgeschlagen, weil es versucht hat, die Methode getStreet() aufzurufen.
  3. because the return value of "User.getAddress()" is null: Das ist der entscheidende Teil. Die Methode user.getAddress() hat null zurückgegeben und Sie können keine Methoden für einen null-Verweis aufrufen.
  4. at MyClass.main(MyClass.java:8): Der Fehler ist in Zeile 8 der Datei MyClass.java aufgetreten. Die Zeile lautet: System.out.println("User's street: " + user.getAddress().getStreet());

Wahrscheinliche Ursache

Der Fehler NullPointerException tritt auf, weil das Feld address Ihres User-Objekts nie initialisiert wurde.

  1. In MyClass.java erstellen Sie ein User-Objekt: User user = new User("Alice");.
  2. Der User-Konstruktor public User(String name) legt die name des Nutzers fest, lässt das Feld address jedoch als null.
  3. Wenn Ihr Code user.getAddress() ausführt, wird der Wert des Felds address (null) korrekt zurückgegeben.
  4. Das Programm versucht dann, .getStreet() für diesen null-Wert auszuführen, was zum Absturz führt.

Korrekturvorschlag

Um dieses Problem zu beheben, müssen Sie ein Address-Objekt erstellen und es dem User-Objekt zuordnen, bevor Sie darauf zugreifen.

Hier sehen Sie die korrigierte MyClass.java-Datei:


// File: MyClass.java
public class MyClass {
  public static void main(String[] args) {
    // Create a new user
    User user = new User("Alice");

    // Create and set the user's address
    Address address = new Address("123 Main St", "Anytown");
    user.setAddress(address);

    // Now, this line will work correctly
    System.out.println("User's street: " + user.getAddress().getStreet());
  }
}
  

Eingaben zur Fehlersuche simulieren

Wie gewünscht können wir verschiedene Szenarien simulieren, um zu verstehen, wie man robusteren Code schreibt. Ich verwende Python, um die Logik zu veranschaulichen, da es sich hervorragend für schnelle Simulationen eignet.

Hier ist eine Simulation, die das ursprüngliche Problem, die Korrektur und eine defensive Prüfung zur Vermeidung zukünftiger Abstürze zeigt....