• 締切済み

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

Perlのデバック中に今いるディレクトリを知りたい場合、一旦プログラムを終了して今いるディレクトリを書き出すコードを追加する以外に方法は無いでしょうか。 それだとディレクトリが移動しそうな場所すべてにコードを追加しないといけないので、結構面倒だと思います。 一番教えて欲しいのはデバッカー内で常に今いるディレクトリを教えてくれる変数のような類です。それができない場合、デバックから抜けることなく今いるディレクトリを知るコマンドのような類は無いでしょうか。 デバッカーとしては、Perlに標準のものの他に、Active Perl のPDKも持っています。

  • Perl
  • 回答数4
  • ありがとう数0

みんなの回答

  • Wap58
  • ベストアンサー率33% (29/87)
回答No.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); }

  • Wap58
  • ベストアンサー率33% (29/87)
回答No.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; };

  • Wap58
  • ベストアンサー率33% (29/87)
回答No.2

.perldbファイルを作ってホームフォルダーにおく $DB::alias{'@'} = 'print`pwd`'; Windowsだと 'print`cd`';かな http://perldoc.jp/docs/perl/5.10.0/perldebug.pod

回答No.1

UNIX/Linux上なら $ENV{'PWD'} に実行したカレントディレクトリは入っていますが、perl内でchdir()しても変更されません。 なので、  !! pwd もしくは  system('pwd')  をデバッガ上で評価(実行)するか ですかね。 Windows上のは使ったことないけど、多分  !! cd とか  system('cd') じゃないかな。 ただし、perl内でのディレクトリの移動というのが、chdir()を使ったカレントディレクトリの移動でなく opendir()でディレクトリサーチ先の指定を変更しているだけなら、これでは意味はないですが。

関連するQ&A

  • ディレクトリの削除について

    perlにてディレクトリの作成を行ったのですが、間違えて最後の改行コードを抜き忘れてしまい"aaa\r\nbbb\r\n"というようなディレクトリ名のディレクトリができてしまいました。 このディレクトリを削除したく、以下の事を試したのですがいずれもうまくいきませんでした。 ・FTPツールから削除 ・コマンドプロンプトからrmdir ・perlにてrmdir("aaa\r\nbbb\r\n")実行 このディレクトリを削除することは出来ないのでしょうか。 宜しくお願いします。

    • ベストアンサー
    • Perl
  • 今まで使ってたユーザーフォームがいきなり使えなくなりました。

    UserForm1に テキストボックスの追加やコマンドボタンの移動などを行なったところ 「実行時エラー91 オブジェクト変数、またはwithブロック変数が設定されていません。」 となってしまいます。 デバックしてもなにもエラーが見つかりません。 何が原因なのかさっぱりわかりません。 助けてください。 補足があれば追加します。 (2003 エクセル) よろしくお願いします。

  • htmlでのディレクトリ(パス)指定方法

    htmlでファイル指定ボタンを作る場合は下記のように指定します。 <input type="file" name="xxx"> ディレクトリを指定する場合はどのようなコードを書けばよいのですか? もし、不可能ならばここのパソコンでwindowsのデスクトップのパス位置を得るためにはどのようにすればわかるのですか? htmlでもperlでもなんでもかまいませんので、教えてください。

    • ベストアンサー
    • HTML
  • ^Mをディレクトリにある全てのファイルから削除する方法

    ^Mにはいつも悩まされます。。 ^Mをディレクトリ内の全ファイルから 一発で削除する方法ありますでしょうか? 文字コードはEUCです。 perl -i.bak -pe 's/cM//' * とやっても^Mは消えてくれませんでした。。 LinuxかWindowsでできれば広範囲な環境で 削除できるコマンドはシェルが知りたいです。

  • (Access)VBA デバックの仕方について

    スレッド違いかもしれませんが、プログラムの事なのでこちらに質問させて頂きます。 (アクセス)フォームに作成した【ボタン】にクリック時イベントをVBAコードで記入しました。 Private Sub コマンド0_Click() MsgBox "a" End Sub ・コンパイルして上書き保存。 ・実行時エラーがないか、F5ボタン(sub ユーザーフォームの実行) すると、マクロをクリック時イベントに貼り付けた訳でもないのに、【マクロボックス】が表示されて、デバックできません。 【質問】 (1)そもそも上記のようなコードの場合、デバックするにはわざわざフォームに戻って、コマンド0をクリックしてチェックしないといけないのでしょうか? (2)また、F5ですぐにプログラムが実行される時と、マクロボックスが表示される場合と有りますが、どのいう時にそれぞれのパターンに分かれていくのでしょうか? VBAまだまだ初心者なので、かなり混乱しています。 どなたか、ぜひ、ご指南よろしくお願いします。

  • MS-DOSでperl実行時にコマンドプロンプトが認識されず困っていま

    MS-DOSでperl実行時にコマンドプロンプトが認識されず困っています。 Active Perlをインストールして、Tera-Padでスクリプトを書き、MS-DOSでテストしています。 "du"や"ls"などのコマンドを(``)で囲ってスクリプトに記述すると、「`du`は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません」というエラーが出てしまいます。winfaqを参照し、 http://homepage2.nifty.com/winfaq/w2k/trouble.html#1467 環境変数を設定しました。(但し、環境変数に設定しているのは下記の1行のみではありません。すでに1つ別のソフトインストールで自分でPATHを設定していますので、今回は";"で下の1行を追加しました。) %SystemRoot%;%SystemRoot%\System32;%SystemRoot%\System32\Wbem そしてPCを再起動しても事象は変わりません。 因みに、Active Perlは「C:\perl」フォルダにファイルがあります。binはその下にあり、環境変数にも「C:\perl\bin」として追加済みです。 いろいろと試してみたのですが、原因がわからず困っています。 ぜひアドバイスをいただければ大変助かります。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • Perl
  • perlとcygwinをインストールしてwindowsにPathを設定

    perlとcygwinをインストールしてwindowsにPathを設定しようとしましたが、 ユーザーの環境変数を C:\cygwin\bin\; C:\xampp\perl\bin\; のように設定しましたが、コマンドプロンプトからは実行できませんでした。 システムの環境変数に追加しようとしましたが、 Pathがいっぱいで追加できませんでした。 Pathがいっぱいの場合、どのように追加したらいいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • 開発時に保存されるデフォルトディレクトリはどこに?

    VB6にて開発中です。 今まで、コードで作成するファイル類は全てフルパスで指定していましたので、問題なかったのですが、開発時に単純にファイル名だけを指定してファイルを作成した場合、デフォルトではどこのディレクトリに作成されるのでしょうか。 作成したファイル名で検索すると、様々な場所(前回編集した別のプロジェクトが保存されているディレクトリなど)に保存されているのですが、デフォルトディレクトリは存在しないのでしょうか。 単純にフルパスで指定すれば問題ないのですが、一時的(デバック用)に作っておくファイルがどこに保存されるのかわからないのは不便です。 プロジェクトの設定でデフォルトディレクトリを設定する方法はあるのでしょうか。

  • ブラウザから起動すると、いきなりプログラムが終了してしまいます。

    今制作中のCGIをブラウザから起動すると  Error 500  CGI エラー - 標準出力に何も出力されていません。 でもコマンドラインから起動すると、しっかりHTML文を吐き出しています。もちろんCGIヘッダーも吐き出しています。 デバッガとしてActiveState社のPDKを使っているので、シュバング行に-dを付けておけばブラウザから起動しても一行ずつ実行されるはずですが、実行されません。URL窓にURLを打ち込む、即前述のエラーが出る次第です。 PDKのバグではなかろうかと思ったりしますが、シュバング行の-dを外しても症状がまるで変わらないというのは・・・ こういう症状を体験されたことのある方はいらっしゃらないでしょうか? 何が原因だと思われます? 言語はPerlです。

    • ベストアンサー
    • CGI
  • ある階層のすべてのディレクトリ内にディレクトリ作成

    例えば /home/hoge/aaaa/ /home/hoge/bbbb/ /home/hoge/cccc/ のようなディレクトリ構成で、 /home/hoge/aaaa/1/ /home/hoge/bbbb/1/ /home/hoge/cccc/1/ のように新たなディレクトリを作成したいと思い、 mkdir /home/hoge/*/1 としたところ、 mkdir: cannot create directory `/home/hoge/*/1': No such file or directory と怒られてしまいました。 こういった処理をしたい場合は、シェルスクリプトを組むしかないのでしょうか? 当方、シェルスクリプトには明るくなく学習時間を考えると、30ディレクトリ程度なので手作業でやった方が早いと思うので、そのようにしたいと思ったのですが、もしコマンドラインでうまいこと記述できる方法をご存知でしたら、ご教授願いたいです。 厚かましいですが、もし容易にシェルスクリプトで記述できるならコードを書いてくださると助かります。

専門家に質問してみよう