こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

デバック中に、今いるディレクトリを調べる方法

Perlのデバック中に今いるディレクトリを知りたい場合、一旦プログラムを終了して今いるディレクトリを書き出すコードを追加する以外に方法は無いでしょうか。

それだとディレクトリが移動しそうな場所すべてにコードを追加しないといけないので、結構面倒だと思います。

一番教えて欲しいのはデバッカー内で常に今いるディレクトリを教えてくれる変数のような類です。それができない場合、デバックから抜けることなく今いるディレクトリを知るコマンドのような類は無いでしょうか。

デバッカーとしては、Perlに標準のものの他に、Active Perl のPDKも持っています。

投稿日時 - 2017-10-13 03:45:56

QNo.9385289

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

すんません先のは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);
}

投稿日時 - 2017-10-15 21:44:29

ANo.3

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;
};

投稿日時 - 2017-10-15 19:08:56

ANo.2

.perldbファイルを作ってホームフォルダーにおく

$DB::alias{'@'} = 'print`pwd`';

Windowsだと 'print`cd`';かな

http://perldoc.jp/docs/perl/5.10.0/perldebug.pod

投稿日時 - 2017-10-14 19:56:27

ANo.1

UNIX/Linux上なら
$ENV{'PWD'}
に実行したカレントディレクトリは入っていますが、perl内でchdir()しても変更されません。

なので、
 !! pwd
もしくは
 system('pwd')  をデバッガ上で評価(実行)するか
ですかね。

Windows上のは使ったことないけど、多分
 !! cd
とか
 system('cd')
じゃないかな。

ただし、perl内でのディレクトリの移動というのが、chdir()を使ったカレントディレクトリの移動でなく
opendir()でディレクトリサーチ先の指定を変更しているだけなら、これでは意味はないですが。

投稿日時 - 2017-10-13 23:50:49

あなたにオススメの質問