2016-04-01 21 views
7

kullanırken 'run' ve 'debug' için farklı çıktılar Aynı kod için iki farklı çıktı alırım. Ben her satırda hata ayıklama ve adım (Netbeans 8.1 kullanarak) bir sonuç alırsınız. Kodu tek seferde çalıştırdığımda farklı bir sonuç elde ediyorum. Readline()

Bu

public class Testing { 
    public static void main(String... args) throws IOException { 
     BufferedReader file = new BufferedReader(new FileReader("input")); 
     String str = file.readLine(); 
     System.out.println(str); 
    } 
} 

Bu

giriş dosyasını

first 
second 
third 
fourth 

kod her iki durumda da ilk satırı first yazdırmalısınız olduğunu kodudur. Ama bunu sadece kodu çalıştırdığımda yapar.

Kodu ayıklayıp her satırdan adım atarsam, ikinci satır second yazdırılır.

Bu neden oluyor?

Güncelleme: Aşağıdaki, bir hata ayıklama ekran görüntüsüdür. Şu an, eğer adım atarsam, System.out.println hattını çalıştıracağım. Sağ tarafta gördüğünüz gibi str 'second' içeriyor.

enter image description here

+0

Bu her seferinde gerçekleşir mi? Veya aralıklı mı? – Kon

+0

@Kon Her seferinde olur. –

+0

Kodunuzda hata ayıklama yapmak için hangi yardımcı programı kullanıyorsunuz? – snickers10m

cevap

11

hata ayıklaması sırasında IDE file.readLine() değerlendirmek mu? Eclipse'de, tam olarak bunu yapan “izle ifadeleri” tanımlanabilir.

Bu, sorununuzu açıklayabilir, çünkü kod satırını adım adım uyguladığınızda, tam olarak file'un tanımlandığı bir satır vardır ve bu nedenle yukarıdaki ifade değerlendirilebilir. Bu nedenle first yerine second çıktısı.

Güncelleme: Artık ekran görüntüsünü eklediniz, anlaşılıyor. Kısmen Netbean geliştiricisinin hatasıdır, çünkü başlıkta "Değişkenler" i seçtikleri için yanıltıcıdır, çünkü değişkenleri değerlendirmek bir yan etkiye sahip olmadığından, (file.readLine() gibi) keyfi ifadelerin değerlendirilmesinde açıkça bulunur.

+1

Tahmininiz doğruysa, bu gerçekten mükemmel bir tahmindir. – Kon

+0

Çoğaltabilirim! Sadece 'file.readLine() 'konumunda durun ve bunun için bir izleyici etkinleştirin ve sysout ikinci satırı yazdıracaktır. Bu benim için yeni – dambros

+2

Belki de bu, bu ekran görüntüsünde izleme listesinde gösterilen ifade file.readLine() yöntemini değerlendirerek bir yan etkiye neden olan bir hata ayıklayıcı örneğidir. Rolland haklı, bu kök sebebi olmalı. –

İlgili konular