言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

Win32 開発で printf デバッグをする方法

長年の謎がついに解けました。万年 C 言語初心者の私にとって。小躍りせんばかりに嬉しい豆知識です。皆さんご存知でしたか? Windows プログラムでもちゃんと printf デバッグが出来るのです!

  • Windows プログラムで標準出力を表示する方法。
    • Windows プログラムは自動的には標準出力をコンソールに書き出さない。
    • > や | 等のパイプ演算子が明示的にコマンドラインにあると標準出力を読める。
    • 例1: program.exe > log.txt
    • 例2: program.exe | cat
    • プログラムの中では printf() の後にしつこく fflash() を入れると効果的。

Windows には大まかに二つのプログラム形態があります。コンソールプログラムと GUI プログラムです。コンソールプログラムは伝統ある DOS 窓から実行するやつで、GUI は一般的なダブルクリックで実行するやつです。コンソールの方は linux のプログラムなんかと同じくプログラムの標準出力を利用してデバッグしたりテキスト処理が出来るのですが、GUI プログラムの標準出力は謎の動きをするので避けて通っていました。

しかし昔から Squeak VMソースコードを読んでいて、あちらこちらに埋め込まれている printf 見るに付け、一体アンドレアスはこれをどう使っているのか、もしかして目の交換でもしないと標準出力が見えないのではないかと不審に思っていたのです。結論は簡単でした。(たぶん) GUI プログラムとしてコンパイルされたプログラムは、自動的に標準出力をコンソールに吐き出さないだけで、実行時にパイプで指定すると利用する事は出来るという事でした。これは Windows 界では常識なのでしょうか?醜悪だ。。。

これでまた謎が一つ解けた。