使用案例:偵錯及排解程式碼問題

您可以使用 Gemini Enterprise 偵錯及排解無法運作的程式碼問題。

提示範例

在對話方塊中輸入提示,例如:

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?

輸出範例

Gemini Enterprise 會根據這項提示產生類似下列內容的輸出結果:

當然可以!我很樂意協助你解決這個問題 NullPointerException。讓我們分析問題並找出解決方案。

錯誤分析

您提供的堆疊追蹤記錄是瞭解問題的關鍵:


  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)
  

這表示:

  1. java.lang.NullPointerException:這是錯誤。當您嘗試使用未指派給物件的參照時,就會發生這種情況,也就是說,參照指向 null
  2. Cannot invoke "Address.getStreet()":程式嘗試呼叫 getStreet() 方法,因此失敗。
  3. because the return value of "User.getAddress()" is null:這是重要環節。方法 user.getAddress() 傳回 null,您無法在 null 參照上呼叫任何方法。
  4. at MyClass.main(MyClass.java:8)MyClass.java 檔案的第 8 行發生錯誤,內容為:System.out.println("User's street: " + user.getAddress().getStreet());

可能原因

發生 NullPointerException 是因為 User 物件的 address 欄位從未初始化。

  1. MyClass.java 中,您會建立 User 物件:User user = new User("Alice");
  2. User 建構函式 public User(String name) 會設定使用者的 name,但將 address 欄位保留為 null
  3. 程式碼執行 user.getAddress() 時,會正確傳回 address 欄位的值,也就是 null
  4. 接著,程式會嘗試對該 null 值執行 .getStreet(),導致當機。

建議修正方式

如要修正這個問題,請先建立 Address 物件並與 User 物件建立關聯,再嘗試存取該物件。

以下是修正後的 MyClass.java 檔案:


// 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());
  }
}
  

模擬輸入內容以進行偵錯

根據您的要求,我們可以模擬不同情境,瞭解如何編寫更健全的程式碼。我會使用 Python 示範邏輯,因為這個語言很適合快速模擬。

以下模擬作業顯示原始問題、修正方式,以及防禦性檢查,可避免日後發生當機情形。