簡體   English   中英

循環使用System.out.print進行調試(Eclipse)

[英]Debug with System.out.print in a loop (Eclipse)

令我驚訝的是,在以下程序中,循環中的Eclipse控制台無法打印。 它僅打印:“開始:完成”。 當我改用println的時候。 當我刪除評論時,它也是如此。 驚喜:當我在控制台中復制“開始:完成”行時,剪貼板中確實包含所有打印的數字。 有趣的是,這種行為的原因是什么?

public static void main(String[] args) {
        System.out.print("start: ");
        for (int i = 0; i < 10000; i++) {
            // if (i > 1000 && i < 1010)
                System.out.print(i + " ");
        }
        System.out.println("finish");
    }

Java中的Println或print(“ \\ n”)在C&C ++中,刷新緩沖區並強制其打印緩沖區中的所有內容,但是當使用print白色而不用任何\\ n(換行)時,不一定是打印緩沖區

好吧,那里的線很長。 因此,您很有可能超出了Eclipse控制台可以可靠顯示的最大行長。 內容可能已經打印在此處(事實證明,當您復制和粘貼時內容出現在剪貼板中),但呈現效果不佳。

行為已確認。 奇怪,必須與Eclipse包裝的輸出流有關。 我的Eclipse 3.5。 如果內部緩沖沒有正確地刷新()或對於一行來說太寬,則可能會丟棄輸出。

package tests;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

public class EclipsePrint {
    public static void main(String[] args) {
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        PrintStream out = System.out;
        System.setOut(new PrintStream(new BufferedOutputStream(bout), true));
        System.out.print("start: ");
        for (int i = 0; i < 10000; i++) {
                // if (i > 1000 && i < 1010)
                        System.out.print(i + " ");
        }
        System.out.println("finish");
        out.println(bout.size());
        out.println(bout.toString());

        bout = new ByteArrayOutputStream();
        System.setOut(new PrintStream(new BufferedOutputStream(bout), true));
        System.out.print("start: ");
        for (int i = 0; i < 1000; i++) {
                // if (i > 1000 && i < 1010)
                        System.out.print(i + " ");
        }
        System.out.println("finish");
        out.println(bout.size());
        out.println(bout.toString());
    }
}

在Eclipse中的Run/Debug:Console:console buffer size (characters)中有一個控制台設置,它允許您最多使用10 ^ 6個字符作為控制台緩沖區。 您的第一個循環超出了它。

在eclipse 3.4 / Mac OSx上進行了嘗試,當上限為1000時,打印效果很好,但是對於10000,顯示被截斷了。

代替System.out.print,使用System.out.println;。 這是針對每行的,它對我來說可以正常工作10000。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM