- 締切済み
デバック中に、今いるディレクトリを調べる方法
Perlのデバック中に今いるディレクトリを知りたい場合、一旦プログラムを終了して今いるディレクトリを書き出すコードを追加する以外に方法は無いでしょうか。 それだとディレクトリが移動しそうな場所すべてにコードを追加しないといけないので、結構面倒だと思います。 一番教えて欲しいのはデバッカー内で常に今いるディレクトリを教えてくれる変数のような類です。それができない場合、デバックから抜けることなく今いるディレクトリを知るコマンドのような類は無いでしょうか。 デバッカーとしては、Perlに標準のものの他に、Active Perl のPDKも持っています。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Wap58
- ベストアンサー率33% (29/87)
すんません先のはPerl5.10だった、バージョンで違うのね 5.18だと1800行目くらい、多分バージョンで細かく変わる いずれにしてもreadlineを探してください sub _DB__read_next_cmd { my ($tid) = @_; # We have a terminal, or can get one ... if (!$term) { setterm(); } # ... and it belogs to this PID or we get one for this PID ... if ($term_pid != $$) { resetterm(1); } # ... and we got a line of command input ... chomp( my $cd = `pwd` ); ### <= `cd` ここ $cmd = DB::readline( "$cd $pidprompt $tid DB" ### <= `cd` ここ . ( '<' x $level ) . ( $#hist + 1 ) . ( '>' x $level ) . " " ); return defined($cmd); }
- Wap58
- ベストアンサー率33% (29/87)
perl5db.plをコピーしリネームして2000行目くらいを書き替え カレントディレクトリか絶対パスでrepuireして Winは環境変数なのか良く知らないけどパスをとおす PERL5DB 'BEGIN { require "myperl5db.pl" }' http://perldoc.jp/docs/perl/5.10.0/perldebug.pod#Debugger32Customization # The big command dispatch loop. It keeps running until the # user yields up control again. # # If we have a terminal for input, and we get something back # from readline(), keep on processing. chomp( my $cd = `pwd` ); ### <= `cd` ここ CMD: while ( # We have a terminal, or can get one ... ( $term || &setterm ), # ... and it belogs to this PID or we get one for this PID ... ( $term_pid == $$ or resetterm(1) ), # ... and we got a line of command input ... defined( $cmd = &readline( "$cd $pidprompt $tid DB" ### <= `cd` ここ . ( '<' x $level ) . ( $#hist + 1 ) . ( '>' x $level ) . " " ) ) ) { share($cmd); # ... try to execute the input as debugger commands. # Don't stop running. $single = 0; # No signal is active. $signal = 0; # Handle continued commands (ending with ¥): $cmd =~ s/¥¥$/¥n/ && do { $cmd .= &readline(" cont: "); redo CMD; };
- Wap58
- ベストアンサー率33% (29/87)
.perldbファイルを作ってホームフォルダーにおく $DB::alias{'@'} = 'print`pwd`'; Windowsだと 'print`cd`';かな http://perldoc.jp/docs/perl/5.10.0/perldebug.pod
- superside0
- ベストアンサー率64% (461/711)
UNIX/Linux上なら $ENV{'PWD'} に実行したカレントディレクトリは入っていますが、perl内でchdir()しても変更されません。 なので、 !! pwd もしくは system('pwd') をデバッガ上で評価(実行)するか ですかね。 Windows上のは使ったことないけど、多分 !! cd とか system('cd') じゃないかな。 ただし、perl内でのディレクトリの移動というのが、chdir()を使ったカレントディレクトリの移動でなく opendir()でディレクトリサーチ先の指定を変更しているだけなら、これでは意味はないですが。