• ベストアンサー

Perlのデバッグ方法って。。。ないでしょうか??_no

こんにちは。よろしくお願いします。 Perl担当者の方が休まれているため、急遽、Perlシステムの修正作業を行うことになったPerl初心者の者です。 普段はASPを使っているので、デバッグ時に「response.write」など、処理内容をブラウザ上に表示させてしまう~などのことが可能なのですが。。。 Perlの場合、何か方法は無いでしょうか?? 多分、この変数とこの入力値の比較の時に不正があるんだろ??のような部分は発見したのですが。。。その値~の表示ができないので、確証が持てない&修正が容易ではないです。 Perlのデバッグは。。。どのように行っているのでしょうか。。。? ご存知の方いましたら、ご教授願えませんでしょうか。よろしくお願いします。 (エラーについての質問は別で立てさせていただきたいと思います。

  • Perl
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

> 多分そのように思います。(「.cgi」や>「.pl」拡張子は、CGIスクリプト。という> 覚え方であっていればですが。 .plはシェルのコマンドラインで起動するファイルにも 使いますのでなんともいえませんが、 .cgiという拡張子ならまあCGI用でしょうね。 日本語のドキュメントがあるかどうかわかりませんが、 CGI::Carpには、メッセージの出力先を切り替える メソッドがあります。 ちょっと引用すると The carpout() function requires one argument, which should be a reference to an open filehandle for writing errors. It should be called in a "BEGIN" block at the top of the CGI application so that compiler errors will be caught. Example: BEGIN { use CGI::Carp qw(carpout); open(LOG, ">>/usr/local/cgi-logs/mycgi-log") or die("Unable to open mycgi-log: $!\n"); carpout(LOG); } とすると、 Perlからのログ出力が /usr/local/cgi-logs/mycgi-log になります。 ここを適当なディレクトリと名前にしてやってみてはどうでしょう。 詳しい説明はPerlがインストールされている環境で perldoc CGI::Carp とすればでてきます。 ちょっと余計なことかもしれませんが、別の質問において提示されている プログラム片を見る限りずいぶんと古いスタイルでお書きのようですね。 歴史があるプログラムかもしれませんが、もうちょっと 担当者の方は勉強されたほうが良いかと思います。 あともう一つ。 サーバソフトがわからなかったので前回の回答で httpdと書きましたが、IISらしいということがわかりましたので IISのログを調べてみてください。 IISは使ったことないので具体的に、「ここだよっ」 とはいえませんが。

STICKY2006
質問者

お礼

たびたびの回答ありがとうございます。 非常に助かります。 教えていただいたものを検索して http://www.perl-labo.org/basic/debug/ ブラウザにそのまま表示する~方法もあるようなので、そちらを適用してみました。 ちょっとメッセージ内容が分かりづらいですが^^; ファイルに吐き出す~方法も、使えるようにしておきたいと思います。 ありがとうございました。 >>歴史のあるプログラム かもしれません。。。 開発したの自体が数年前のもののはずなので。。。 改版作業が入るかどうかは不明ですが、新しい技術~は常に勉強しておけるよう努力したいと思います。 助かりました。 どうもありがとうございました。

その他の回答 (2)

  • danmarino
  • ベストアンサー率63% (26/41)
回答No.3

KENT WEBさん(http://www.kent-web.com/)が配布されているPerlの文法チェッカ「Perl Checker」を使ってみるのもいいかもしれません。 トップページから「ユーティリティ」のリンクを辿るとダウンロードページにいけます。

参考URL:
http://www.kent-web.com/
STICKY2006
質問者

お礼

こんにちは。回答ありがとうございます。 文法チェック。 強い味方~ですねぇ。 打って、エラーメッセージなどで確認しようとしても、たまに追いかけられませんからねぇ。。。 文法のエラーだったりしたらへこみますし(汗 どんな風になるのか使ってみたいと思います。 どうもありがとうございました。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

CGIスクリプトのデバッグだったりしますか? Perlを知らない人に伝わるように説明できる自信はありませんが、 エラーメッセージの出力先を切り替えてログに残すようにできます。 モジュールを使っていいのなら、 use CGI::Carp; して warn "\$fooの値が変じゃね? ($foo)"; とかすればOK。 とくに指定しなければ httpd のログに残ります。 > ご教授願えませんでしょうか。よろしくお願いします。 教授ってのは学校でやるような系統立てた教え方ですので、 ここでするような質問で使うのはふさわしくありません。 多分「教示」と混同していると思います。

STICKY2006
質問者

お礼

こんにちは。回答ありがとうございます。 >>CGIスクリプトのデバッグ ん~。。。と。 多分そのように思います。(「.cgi」や「.pl」拡張子は、CGIスクリプト。という覚え方であっていればですが。 >>出力先を切り替えてログを残すようにできます。 なるほど。。。 ちょっと試してみました。 ただ。。。httpdのログ~がどこなのか分からず^^; ASPとPerlが混在しているサーバなので、そこもややこしくしている要因のひとつかも。。。? サーバソフトとしては、IISの方を使用しているはずですが。。。 まずは、提示していただいた文の意味と仕様~をちゃんと把握してから探っていきたいと思います。 ありがとうございます。 。。。同時に、日本語も復習しておきます_no

関連するQ&A

  • perl

    perlのデバッグ方法を教えてください。 debug 関数の使い方を知りたいです。ブラウザ上に変数の値を確認したいです。

    • ベストアンサー
    • Perl
  • PERLのでバッグ

    PERLでデバッグをしているのですが、変数にどんな値が入っているのかみようと思うのですが、やり方がわかりません。 デバッグモードに入ってからどうすればいいのでしょうか? 環境はWindows2000からtelnetでRedhat9へ接続している感じです。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • asp.netのデバッグ方法について

    こんにちわ。 いま.net2003でasp.netの勉強をしている者です。 vb6.0のときに"debug.print~"というのがあって, [デバッグウィンドウ]にその時点の変数を表示することができたのですが,asp.netでそのような機能はあるでしょうか? 教えてください。よろしくお願いします。

  • PHPのデバッグ方法

    PHPでデバックする方法を探しています。 var_dumpやprint_rで変数を表示させる以外に、効率よくデバッグできる方法が知りたいです。 GUIで値がウォッチできたり、ソースのバージョン管理できるような ソフトはあるのでしょうか?

    • ベストアンサー
    • PHP
  • Visual C++6.0 デバッグ中にグローバル変数を書き換えたい

    こんにちは。 Visual C++6.0 のデバッグ中に、ローカル変数を 変数ウィンドウに書き込んで、値を変更して動作確認を 行っているのですが、グローバル変数(たとえばerrnoなど)を、同様に変数ウィンドウに書き込むと、「CXX0017: Error: シンボル "errno"が見つかりません」と表示されてしまいます。errnoをローカル変数のようにデバッグ中に書き換えることはできないのでしょうか。 よろしくお願いします。

  • デバッグ情報が画面から流れないようにするには。

    膨大な量のデータを処理するプログラムを完成しました。私の環境は、ネット回線も細くパソコンも性能が低いこともあいまって、全ての処理を終えるのに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を使っています。

  • Windows2000のでのデバッグ・・・・

    ごく最近Windows2000serverにWEBサーバーを変えたのですが、ASPのデバッグをする際にNTの時は見えていたエラーの内容が2000だと全て500エラーになってしまいますよね? これを以前のNTと同じようにデバッグしやすいように表示させたいのですが・・・・ 空くまでローカルのテストサーバーでの使用なのでどなたか判る方居ましたら教えてください。

  • ASPへの値渡し

    IIS上のaspで index.asp?ID=1234?name=hoge とURLにうち、 asp内部は HTMLのヘッダ等 ・・・・ 1234 ←表示される <% Public ID Public name Response.write(ID); ←表示されない R Response.write(name);←表示されない Response.write("ほげほげ");←表示さる %> となってしまいます。 値を外から持ってくる方法が間違っているのでしょうか? 間違っている点の指摘等 よろしくお願いします。

  • -1.#IND00 をデバッグしたい

    質問です。 C++でプログラムを実行したところ, ごく希に-1.#IND00 という値が入っている変数がありました. デバッグのため,値が-1.#IND00 となったらデバッグプリントを表示したいのですが、 どのようにやればよいでしょうか? 環境は.net 2003です。 ちなみに、 float fx = 0.0; float r; ・・・・rに計算結果を格納 if(r == -2.0f/fx || r == 2.0f/fx || r == fx/fx || r == -fx/fx){ }としてみたところダメでした。 どなたかよろしくお願いします。

  • レガシーASPのデバッグ

    tomixと申します。 レガシーASPをメンテナンスしております。 VS2005 Pro. EditionでレガシーASPをステップしながらデバッグしたいのですが どのようにすれば、サーバーサイドのプログラムをステップしながらデバッグできるかわかりません。 どなたか、ステップデバッグしているという方はおられますか? http://msdn.microsoft.com/ja-jp/library/ms241740(VS.80).aspx を読むとできるようなのですが、以下がわからず困っております。 まず「Mtx.exe プロセスにアタッチする必要があります。」の Mtx.exeはどのようにすればアタッチする画面に表示されるでしょうか? よろしくお願いします。

専門家に質問してみよう