- 締切済み
デバッグ情報が画面から流れないようにするには。
膨大な量のデータを処理するプログラムを完成しました。私の環境は、ネット回線も細くパソコンも性能が低いこともあいまって、全ての処理を終えるのに2~3日かかるプログラムです。 それでも2~3日待てば処理が終わるのです。 やったー、と思ったまでは良いですけど、いざ動かしてみると、何やら警告が出ます。幸いまだデバッグ用の変数書き出しコードを削除していなかったので、だいたいバグが出たあたりが分かりました。処理結果を見てみると、確かに処理されたデータが壊れています。はて、何が原因かと、処理がその箇所を過ぎるあたりに注目しながらもう一度プログラムを動かしてみても、何故か今度は警告も出ないし、データを確認しても壊れていません。さっきのは一体なんだったのか。。。 とにかく再現できないことにはデバッグのしようもないので、プログラムの処理状況が分かりやすいように、変数の書き出しを削除せずに、あらためて今プログラムを動かしています。 プログラムを動かしてバグを再現するのは、デバッグの当然の手法でしょうが、変数を打ち出せば、なんせ2~3日かかるプログラムだけに、画面に大量の書き込みがなされて、警告が出ても流れてしまいます。そうかといって2~3日、ずっと画面を眺めているわけにもいきません。 変数をファイルに書き出すようにしても、警告はディスプレイに出ますから、するとどの時点で警告が出たのか、そのときの変数の値がどうだったのか、ファイルとディスプレイを時系列的に照らし合わせることが出来なければ、今ひとつ判断に困ります。 perl bugtuki.pl > test.txt のようにすれば警告もファイルに書き出すことが出来ますが、2~3日待たなければ、ファイルを開くことができません。 警告をファイルに書き出して、そのファイルをプログラムの処理中に見る方法などあるでしょうか。そのほか、この手の状況で、迅速にデバッグ情報を把握する方法がございましたらご教授ください。 一応DOS窓の画面バッファの高さを最大限にはしました。 言語はPerl 5.14.2。デバッグツールとしてActive Perl社のPerl Div Kit 8.2.1を使っています。
- みんなの回答 (3)
- 専門家の回答
補足
ご教授ありがとうございます。お返事が遅くなり申し訳ありません。 この補足はN60-BASICさんとt-okuraさんのお二人へのものです。 どうも私の勘違いで、単純に perl bugtuki.pl > test.txt とやっただけでは、正常な出力はファイルに入れることが出来ますが、エラー出力はファイルに入りません。 N60-BASICさんが教えてくださったように perl bugtuki.pl >test.txt 2>debug.txt とやると、確かに標準エラー出力もファイルに入れることが出来るようになりますが、しかし正常な出力とエラー出力が別のファイルに分かれてしまって、二つのファイルの書き込みのタイミングの整合が取れません。 どうにかして同じファイルに入れることはできないものでしょうか。 ただ一度ファイルに落とすと、まだプログラムが動いている間でも、ブラウザでファイルを閲覧することができました。少しタイミングが遅れますが、今回の用途は何時間かおきに変なエラーが出ていないかチェックを入れるだけなので、このタイミングのずれは気にしなくていいと思います。 あるいは、出力がDOS窓から流れて消えない程度のところで、窓を切り替えたら如何かと思ったりしますが、単純にcmd.exeを呼び出すだけでは、今開いている窓を一掃してしまうだけなので、どうしようかと迷っています。 何か良い方法がございますでしょうか。