C言語関係掲示板

過去ログ

No852 printfデバッグ

[戻る] [ホームページ]
No.10963

printfデバッグ
投稿者---内膜(2003/12/09 10:09:14)


core dumpedというエラーがでたときにprintfでデバッグしようとして
プログラムの途中にprintfをいれたりすることがあるんですが、
どう考えてもここまでは実行できるだろうという部分(メイン関数の頭とか)
にいれてもならないときがあります。
これはどうしてですか?

コンパイラは
gcc version 2.95.2 19991024
こういうやつなんですけど。

No.10965

Re:printfデバッグ
投稿者---JUN2(2003/12/09 10:59:18)


>どう考えてもここまでは実行できるだろうという部分(メイン関数の頭とか)
>にいれてもならないときがあります。

上記のソースが見たい。


No.10966

Re:printfデバッグ
投稿者---あかま(2003/12/09 11:05:58)


printfみたいな高水準関数は高速化のためにバッファに出力する文字をためておき
後々バッファがいっぱいなったら、いっぺんに出力します。
ので、出力するまえにcore dumpedでとまるとそうなります。

printfのあとに
fflush(stdout);
を入れてみてください。fflushはバッファを強制的に出力させます。

No.10967

Re:printfデバッグ
投稿者---NykR(2003/12/09 13:21:54)


>これはどうしてですか?

バッファリングしてるから。
出力されるのは一定の条件を満たしたときです。
・バッファが一杯になった。
・改行文字が来た。

だから、途轍もなく長い文字列にするか、fflushを使うか、改行文字をつければ出力されると思います。

#でも普通printfデバッグは
#fprintf(stderr, /*...*/)
#を使うと思う。(標準エラー出力はバッファリングされない)