変数表示コマンドとPerlデバッガ操作について

このQ&Aのポイント
  • Perlのデバッガを利用してプログラムの動作確認を行っています。Emacs等のIDE操作は不可な環境です。
  • デバッガのwコマンドについて、式がwatch-expressionを必要としていると表示される場合の対処方法がわかりません。
  • 現在実行中の行を含んだ前後のソースコードを表示するコマンドについて教えてください。
回答を見る
  • ベストアンサー

変数表示コマンド

Perlのデバッガ操作について(長文です。) 環境:Linux(Ubuntu) Perl:5.10.1 作成したPerlプログラムをデバッガスイッチをつけて起動し、デバッガを利用してのプログラム動作確認を行っております。 ※この質問に対してEmacs等を利用してのIDE操作を勧める回答は遠慮  して下さい。  当方の都合としてEmacsは利用出来ない環境にあり、CUI上でのIDEも  利用不可と言う環境です。 下記サイトを参考にしながらデバッグコマンドを試しております。 http://www.namazu.org/~tsuchiya/perl/info/perl-ja_106.html http://homepage3.nifty.com/hippo2000/perltips/perldbg.htm 下記内容についての確認方法をご存知の方いらっしゃいましたら御教示願います。 1.wコマンドの仕様(利用方法)  上記サイトでは、wコマンドを利用すると、指定した行の前後を含んだ  ソースコードを表示するとありますが・・・・  Adding a watch-expression requires an expression  と表示されます。  式がwatch-expressionを必要としている・・と訳すとしても意味がわか  りません。 2.現在実行中の行を含んだ前後のソースコードを表示させたい  上記サイトでwコマンドとして紹介されている機能を実現させるコマンド  は何なのでしょうか? 3.指定変数の値表示方法は何?  上記さ意図では編集の表示方法としてVコマンド及びxコマンドが紹介  されています。  「symbol は名前だけを示し、($ などの) 型識別子を付けないように   してください」  とありましたが、「x $value」と指定しないと値が表示されません。  (ハッシュは何が何か解るように、key と value を表示し、コント  ロール文字は表示できる形にします)  とありますが、「x %value」とすると、その ハッシュに納められ  ているアドレス値が表示されます。  ※「x value」としても期待する値は表示されません。 4.指定したハッシュ変数の内容を表示させたい  上記3と関連します。  ハッシュの全体表示を行うコマンドは何なのでしょうか。 上記4点について、識者の方のアドバイスをお願い致します。 また、Perlデバッガについての有益な情報サイトをご存知の方がいら しゃいましたら、是非御教示をお願い致します。

  • Perl
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • t-okura
  • ベストアンサー率75% (253/335)
回答No.1

> 2.現在実行中の行を含んだ前後のソースコードを表示させたい v で表示されますよ。続けて v を入力すると、先のコードが 表示されますが、. で停止しているところに戻ります。 > 3.指定変数の値表示方法は何? x $value でよいはずです。 > 「x %value」とすると、その ハッシュに納められ ているアドレス値 > が表示されます とのことですが、%value=(a=>1,b=>2,c=>3) として、 x $value すると DB<6> x %value 0 'c' 1 3 2 'a' 3 1 4 'b' 5 2 のように表示されませんか。また、変数を \%value と指定すると DB<7> x \%value 0 HASH(0x1d26f3c) 'a' => 1 'b' => 2 'c' => 3 のようにハッシュらしく表示されますよ。

参考URL:
http://perldoc.jp/docs/perl/5.10.0/perldebug.pod
kamuycikap
質問者

お礼

DB<2>x \%value 上記コマンドにてハッシュ変数内部の値を表示出来る事を確認し、vコマンドにて実行している行周辺のソースコード表示を確認いたしまいた。 ありがとうございました。 参考URLの情報は非常にありがたかったです。

関連するQ&A

  • Emacsのコマンド入力で、スペースを入力する方法

    こんにちは。 Emacsは、Gnu Emacs for Windows 23.4 を使っています。 eval-regionコマンドで、いくつかの式を評価した結果を、 別のファイルに出力したいと思っています。 マニュアルでは、eval-regionコマンドの説明は、以下のようになっていました。 ------------------------------------------------------------ コマンド: eval-region start end &optional stream read-function この関数は, カレントバッファのstartとendで指定した リージョン内のフォーム群を評価する. リージョンからフォームを読み取り, それらに対してevalを呼び出すことを リージョンの末尾に達するまで, あるいは, 処理されないエラーが知されるまで繰り返す. streamがnil以外ならば, リージョン内の式を評価した結果の値はstreamを使って表示する. see section 出力ストリーム. ------------------------------------------------------------ 上記の、startとendは、regionを設定した時に決まるものだと思います。 ある範囲をregionとして設定し、M-x eval-regionと入力したとに、 スペースキーを入力すると、ミニバッファには、[Sole completion] と表示され、上記のstreamを指定することができませんでした。 僕の環境では、M-xの後に、Lispコマンドを入力するときに、スペースキーを押すと、 スペースが入力されるのではなく、コマンド名の補完が行われます。 どうすれば、スペースを入力できるようになるのでしょうか? 何か御存じの方がいらっしゃれば、是非、情報を提供して頂きたく思います。 では、よろしくお願い致します。

  • ハッシュの中身の表示

    ハッシュの中身の確認ができなくて困っています。 下記のような実行文においてです。 当然、test の戻り値は、スカラーとハッシュです。ハッシュを戻すときには参照渡し記号の\もつけています。 my ($return_code, %hash_data) = test(); 表示しようとすると、 Hash(0x5b04) のような表示にしかなりません、、 (試した表示方法は、下記4つです。) (環境は、WindowsXP上での、ActivePerl-5.10.0.1004 です。) foreach $key ( keys( %Hash ) ) { print "キー値 : $key\n"; print "値 : $Hash{$key} \n " } while ( ( $key , $value ) = each %Hash ){ print "キー値 : $key\n"; print "値 : $value \n " ; } use Data::Dump qw(dump); print dump(\%hash); #print %display_test; 宜しくお願いします。

    • ベストアンサー
    • Perl
  • お願いします!「Javaについて」 コマンドプロンプトへの表示

    avaについての質問なんですが初心者でわからないのでお願いします。 プログラムに引数を1つ指定して実行した時、入力された値が ・3の倍数の場合は    入力された値に2を掛けた値から1を引いた値  を表示 ・5の倍数の場合は  入力された値に2を足した値を3で割った値  を表示(表示するのは小数点第2位までで、小数点第3位を四捨五入したいんです)   ・それ以外の場合    入力された値は、3の倍数でも5の倍数でもありません」  と表示 【3と5の公倍数が入力された場合は、5の倍数として値を処理したい】 そしてコマンドプロンプトで :\Work>java test 3 演算結果は 5 です とか D:\Work>java test 5 演算結果は 2.33 です と、表示させたいんです。。。 class test { public static void main(String box[]) { int A,B,C,D,E,V,W,X,Y,Z; A = Integer.parseInt(box[0]); if ( ) { System.out.print(""); } else if ( ) { System.out.print(""); } else { System.out.print(""); } } } 上記からよくわかりません、、教えてください!

    • ベストアンサー
    • Java
  • Emacs-Lispモードで、式が返す値を全て表示

    こんにちは。 Emacsは、Gnu Emacs for Windows 23.4 を使っています。 Emacs-Lispモードで、バッファに記述されている式を評価した時、その式が返す値が、ミニバッファに出力されます。 ところが、式が返す値が長すぎると、途中までしか表示されません。 例えば自分の環境だと、 (symbol-value 'load-path) という式を評価すると、ミニバッファには (nil "~" "~/My_Lisp_Programs" "c:/Emacs_for_Windows/emacs-23.4" "C:/Emacs_for_Windows/emacs-23.4/site-lisp" "C:/Emacs_for_Windows/emacs-23.4/../site-lisp" "C:/Emacs_for_Windows/emacs-23.4/lisp" "c:/Emacs_for_Windows/emacs-23.4/lisp/url" "c:/Emacs_for_Windows/emacs-23.4/lisp/textmodes" "c:/Emacs_for_Windows/emacs-23.4/lisp/progmodes" "c:/Emacs_for_Windows/emacs-23.4/lisp/play" "c:/Emacs_for_Windows/emacs-23.4/lisp/org" ...) という文字列が出力され、...以降が表示されません。 どうすれば、Emacs-Lispモードで、式が返す値を全て表示する事ができるのでしょうか? 何か御存じの方がいらっしゃれば、是非、情報を提供して頂きたく思います。 では、よろしくお願い致します。

  • Perl変数から外部プログラムの標準入力へ

    Perlのプログラム内部で保持している変数の値をシェルコマンドに与える方法はありますか? $value=12345; や、 @array=('ONE', 'TWO', 'THREE'); などの変数の値を外部コマンド(標準入力を受けることができるコマンド)に渡したいのです。 方法がわからないので、現在は一度ファイルに書き出して、 system('cat file.name | command'); のようにして渡しています。なんか賢くない書き方のような気がするのですが。

    • ベストアンサー
    • Perl
  • emacsでC-hのコマンドをしてもヘルプにならない

    初めまして、taka-0910と申します。 WindowsXPにcygwinをインストールしてemacsを利用しています。 C-hのコマンドは、ヘルプ機能を実行してくれるコマンドだそうですが、バックスペースになってしまいます。 Webで調べてみたところ、.emacsという環境設定ファイルをつくって (global-set-key "\C-h" 'help-command) と書き込んでみました。 しかし、変化なくバックスペースのままになってしまいます。 また、終了コマンドであるC-x C-cも使えない状態であり、終了しません。 どのように設定すれば、このような問題は解決できるのでしょうか。申し訳ございませんがよろしくお願い致します。

  • 静的ハッシュの配列のキーに対応する値の数の多さ順で表示させたい

    ハッシュのキーに対応する値の数の多さ順で表示させたいと考え、下記の所まで試行錯誤しておりますが、どうにも思ったようにソートできずにおります。 #!/usr/bin/perl use strict; my(%a, $i, $j ,$allarray ,@keys ,@keys2 ,%hash ,%files ,$a_mumei_ref ,$key ,$value ,@value ,$x ,$files); # ハッシュの配列を静的に作る %a = ( '0' => [ qw(0) ], '1' => [ qw(1 1) ], '3' => [ qw(3 3 3) ], '7' => [ qw(7 7 7) ], '2' => [ qw(2) ], '4' => [ qw() ], '5' => [ qw() ], '6' => [ qw() ], '8' => [ qw(8 8) ], '9' => [ qw(9) ], ); @keys = sort { $hash{$b} <=> $hash{$a} || length($b) <=> length($a) || $a cmp $b } keys %a; #ハッシュのキーを数字順で表示 foreach (@keys){ print $_ ."\n"; } # 静的に作ったハッシュの配列を取り出してみる foreach $i (sort keys %a) { for ($j = 0; $j <= scalar(@{$a{$i}})-1; $j++) { print '$a{'. $i. '}['. $j. ']='. $a{$i}[$j]. ' '; } $allarray=scalar(@{$a{$i}})-1; print "No$i:kosuu:$allarray"; print "\n"; #配列の値の個数を調べその配列を作成 my($a_mumei) = $allarray; $a_mumei_ref = \$a_mumei; $files{"$i"}=($i,$a_mumei_ref); } #each関数で%filesの中身を表示 while ( ( $key , $value ) = each %files ){ print "key:$key value:$$value\n" ; } #試行錯誤 foreach $x (sort { $files{$b} <=> $files{$a} } keys %files){ print "$x => $files->{$x}\n"; } @keys2 = sort {$hash{$a} <=> $hash{$b}} keys %files; #@keys2 = sort { $hash{$b} <=> $hash{$a} || length($b) <=> length($a) || $a cmp $b } keys %files; #@keys2 = sort { $hash{$a} cmp $hash{$b} } keys %files; print "@keys2\n"; print "\n"; __END__; 私のイメージしておりますのは、ソートした結果がハッシュのキーに対応する値の数の多さ順で下記のように表示させたいのですが、 どのようにすれば可能でございますか、ご教授願えませんでしょうか key:3 value:2・・・この場合valueは配列の個数 key:7 value:2 key:8 value:1 key:1 value:1 key:9 value:0 key:2 value:0 key:0 value:0 key:6 value:-1 key:4 value:-1 key:5 value:-1

    • ベストアンサー
    • Perl
  • 有用なコマンドありましたらお願いします。

    初投稿にて失礼いたします。 現在困っておりますのが、Win2000、NT、XPすべてに対して有効なコマンドの捜索になります。 行いたい作業は、 上記のOSに対してホスト名、OS、サービスパックの3つの情報を一つのファイルに落とし込むバッチファイルの作成です。 XPだけであればreg の query/v を利用することでレジストリの任意のフォルダから任意の値を選択してひっぱってくることができるのですが、Win2000およびNTではreg では対応しておりませんでした。 対応している regedit というコマンドを試みたのですが値まで指定できるオプションが発見できませんでした。 何か要求を満たせるコマンドや方法がございましたらご教授のほどよろしくお願い致します。

  • perlのデータ構造? デバッグに使いたい

    Perlでよく ハッシュをprintした場合、 HASH(0x2241be4)と表示されますが、 こちらがハッシュを意識しなくてもだいたいの構造が わかるように整形・表示して、具体的な中身を 表示させたいのですが可能でしょうか?

    • ベストアンサー
    • Perl
  • どなたか教えて下さい。

    どなたか教えて下さい。 仕事でデータのハッシュ値を求める必要がありまして、質問致します。 ハッシュ値はマイクロソフトが提供しているfciv.exeというソフトを使い、希望のファイルのハッシュ値が、正しいことを確認しました。(正しいのは当たり前でしょうが・・・) 多少perlの知識がありましたので、perlで他の方のHPを参考にしながら、ハッシュ値を計算したところ、fcivと異なってしまって、誤った値が出ます。 何がおかしいのでしょうか? 作成したperlプログラム↓ use strict; use Digest::SHA1 qw(sha1_hex); open (INFILE,">c:\a_test.txt"); my %file = <INFILE>; print sha1_hex(%file),"\n"; close(INFILE); ちなみに開くファイルに指定したa_test.txtにはSHIFT_JISで「A」を40個入れてみました。 FCIVでは、a_test.txtの回答が5cdbb...で上記perlプログラムだとda39a3...になります。 ちなみに、a_testと名前を変え、バイナリーデータも同じように作成しましたが、 FCIVでは、回答が、5efef....上記perlプログラムではda39a3...となり、perlプログラムの方ではバイナリとテキストが同じ値になってしまいます。 ハッシュ値をよく理解してないことに問題があるのは承知ですが、どなたかプログラムの修正、ご指導宜しくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう