-PR-
回答 受付中

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

  • 困ってます
  • 質問No.9385289
  • 閲覧数135
  • ありがとう数0
  • 気になる数0
  • 回答数4

お礼率 39% (76/193)

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

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

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

デバッカーとしては、Perlに標準のものの他に、Active Perl のPDKも持っています。
通報する
  • 回答数4

回答 (全4件)

  • 回答No.1
レベル12

ベストアンサー率 67% (340/507)

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

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

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

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


  • 回答No.2
レベル9

ベストアンサー率 30% (22/71)

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

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

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

http://perldoc.jp/docs/perl/5.10.0/perldebug.pod
  • 回答No.3
レベル9

ベストアンサー率 30% (22/71)

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;
};
  • 回答No.4
レベル9

ベストアンサー率 30% (22/71)

すんません先のは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);
}
  • 回答数4
このQ&Aのテーマ
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-

特集


抽選で合計100名様にプレゼント!

ピックアップ

ページ先頭へ