標準エラー出力で実行プログラムが停止?No.06336
Bull さん 10/12/24 10:13
 
お世話になります。


プログラム実行で、標準出力と標準エラー出力の両方を
指定している場合、それぞれ大量のデータがあると
実行しているプログラムが停止してしまうようです。
Hidemaru.exeのプロセスのCPU使用率が100%近くに
なっているようなのでご確認をお願いします。

プログラムは例えば以下のようなものです

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int n = 20000;
    int i;

    for (i = 0; i < n; ++i) {
        if (i % 10 == 0) fprintf(stderr, "%5d:", i);
        printf(i % 10 == 9 ? "%5d\n" : "%5d ", rand());
    }

    return 0;
}

※ 標準エラー出力が無ければ正常終了します。
※ 標準エラー出力が一定量以上になるとダメみたいです。

環境:
Windows XP pro SP2
秀丸エディタ V8.03 Beta 6

[ ]
RE:06336 標準エラー出力で実行プログラムNo.06337
秀丸担当 さん 10/12/24 13:02
 

>プログラム実行で、標準出力と標準エラー出力の両方を
>指定している場合、それぞれ大量のデータがあると
>実行しているプログラムが停止してしまうようです。
>Hidemaru.exeのプロセスのCPU使用率が100%近くに
>なっているようなのでご確認をお願いします。

報告ありがとうございます。
同じプログラムを作ってみて、再現させることができました。
標準出力/エラー出力は、それぞれが並行して混在するのを避けるため、可能な限
り行単位にまとめてから出力するようにしているのですが、ある程度バッファに
溜まると続けて出力が届かない場合があるようです。
そういう場合の対策をしてV8.03の次のβ版で修正させていただきます。
ただ、場合によっては1行があまり長いときには改行せずに混在することになって
しまうかもしれないです。

[ ]
RE:06337 標準エラー出力で実行プログラムNo.06338
Bull さん 10/12/24 15:02
 
>報告ありがとうございます。
>同じプログラムを作ってみて、再現させることができました。
>標準出力/エラー出力は、それぞれが並行して混在するのを避けるため、可能な限
>り行単位にまとめてから出力するようにしているのですが、ある程度バッファに
>溜まると続けて出力が届かない場合があるようです。
>そういう場合の対策をしてV8.03の次のβ版で修正させていただきます。
早速の対応ありがとうございます。
よろしくお願いします。

>ただ、場合によっては1行があまり長いときには改行せずに混在することになって
>しまうかもしれないです。
これはしょうがないと思います。(必要ならどちらかをファイルに落としますので)
普通だと標準エラー出力がそれほど大量になることはないのですが、
今回はテストでデバッグ用のメッセージを出力していてこのようなことになりました。

[ ]
RE:06338 標準エラー出力で実行プログラムNo.06346
Bull さん 11/01/05 10:27
 
年末年始の休みで返信が遅くなってしまいましたが、
こちらの問題は、Version 8.03 Beta 7で
修正されていることを確認致しました。


[ ]