「ほっ」と。キャンペーン

<   2007年 11月 ( 3 )   > この月の画像一覧

[perl] ptkdb の使い方

Windows の Perl(ActivePerl) には デバッガ perldb がないので、
代わりに ptkdb を使ってみよう、という企画。

ptkdb の使い方が見当たらない。
みんな使ってないのかしらん?
それとも困ってないのかしら(^^;;
ソース中に書いてあるんだけど、英語なんで、
まるでドメスチックな私は、ハナからくじけるんですが(笑)

開始/終了


実行開始は以下。
C:¥> perl -d:ptkdb ソースファイル名


DOS 窓を開いて、毎回これを入力・実行するのも面倒くさいので、
perl ファイルの時の右クリックメニューに
C:¥Perl¥bin¥perl.exe -d:ptkdb %1

を追加するとラクチンでよろしい。

いつも思うのだけど、DOS 窓も、tcsh とか bash とかみたいに、
!! とか !p で perl...が実行できたらいいのにー。
いちいち入力するのも、コピペするのも、面倒くさい(怒

終了は、ptkdb のメニューから「終了」を選択。

左ペインについて


a0003075_1412867.png
左はずっとソースが表示されます。
行番号に横線が入っているのは、コメントなどの実行されない行。
実行中の行がブルーで反転表示されます。

実行される行番号をクリックすると、
赤く反転されて、ブレークポイントが設定できます。
再度クリックで解除。
設定した後は、ツールバーの「RUN」をクリックすると、
直近のブレークポイントまで実行。

StepOut で見た目一行ずつ実行。
StepIn で、サブルーチンがあれば下って実行。

Goto、Search、なんかの使い方は、まだよくわかりません。
直近の、指定した語句のところまで飛ぶんですが、
それなら、Goto も Search も動作が一緒のような???

あと、なんでか右クリックに StepOut がアサインされているように見えます。
不用意な場所で右クリックすると、進んじゃうので注意。

右ペインについて


右は Exprs, Subs, BrkPts という3つのタブがあります。
a0003075_142724.png
「Exprs」は上に値を入れると、
下のペインに追加されます。
選択して Ctrl-d で削除
1行実行されるたびに、値の変化が表示されます。
配列も全部開いて表示されるので、便利。
Eval の方は、一時的に評価したい式を入れると、
その時点の状況で式を実行してくれます。
実行が進んで、変数のナカミが変わると、
表示も追随して変更されます。
普通の開発環境にはよくある機能なんだけど、
emacs インタフェースの perldb にはないので、
すごく便利ー!

「subs」は、読み込まれているモジュールライブラリの一覧。
クラス名をクリックすると、
変数はメソッドなどが表示されます。
ダブルクリックで、当該部分のソースファイルを左ペインに表示。
デバッグ実行中で、左ペインの表示を実行箇所に戻したい時は、
Stack -> MAIN で戻せます。

「BrkPts」は、
ブレークポイントの追加/削除と ON/OFF ができます。
テキストエリアは何に使うのか、まだ不明。
a0003075_142596.png
ちなみに、このサンプルのソースは私が書いたものではなくて、
satorix というものです。
Windows で動く Perl の環境をお持ちでしたら、試してみてくださいよ。
ホントにマトリックスぽいですよ。
たのしー!

その他


・Bookmark
メニューにブックマーク関連があります。
指定行をブックマークしておくと、
自分がブックマークした行番号がメニューに出るので、
その行を選択してひょいと飛べたりして、便利です。
しかし、Edit Bookmark を選択して、Bookmark リストを編集しても、
メニューがそれに追随しません。
Bookmark を空にしても、メニューに残ってる、というような
状態になることがあります。
イマイチ。

・スクロール
何でか縦スクロールバーが左に。
Windows は通常右に縦スクロールバーが出るので、
一瞬「あれ?スクロールバーどこ?」となります。
何度やっても慣れません。
[PR]
by xiaoxia | 2007-11-26 18:51 | プログラム言語 | Comments(0)

[perl] ActivePerl のデバッガ

UNIX では Perl の開発では Emacs の perldb を使ってきたワタクシ。
Win には Emacs が標準ではないので、
激しくデバッグ効率が悪くて、どうしたものかと思っていた。
伝家の宝刀 Eclipse 使えば何とかなりそうな気もするが、
マシンパワーがないので、あまり重いものは入れたくない。
そこで、以前コメントでご紹介いただいた ptkdb を
早速使ってみることにした。

注:以下は古い
以下のページを参考に。
「Perl/CGI開発環境の整備」

perltk のインストール


ActivePerl には tk が入っているので、何もしなくて良し。
そうだったんだ、知らなかった。

ptkdb のインストール


ppm からインストールしようとして挫折。
ptkdb がないといわれる。
ret add などを使ってリポジトリのパスを登録してみたが、
なんかうまく行かない。
仕方なく以下に書いてある通りにやって成功。
http://www.perl.com/CPAN/authors/id/A/AE/AEPAGE/Devel-ptkdb-1.nnn.tar.gz
Perlをインストールしたディレクトリ(例えばC:¥perl)の¥site¥libディレクトリ(C:¥perl¥site¥lib)の下に Develディレクトリを新規作成(C:¥perl¥site¥lib¥Devel)し、ptkdb.pmをDevelディレクトリにそのまま置くだけでも動きます。


新しいインストール方法


2012.4.25 現在 ActivePerl ver 5.14
方法1
# CPANを起動
> perl -MCPAN -e shell
# バージョンが古いので上げる
cpan> install CPAN
cpan> reload CPAN

# まず Tk をインストール
cpan> install Tk
# 次に ptkdb をインストール
cpan> install Devel::ptkdb


方法2
(1)リポジトリに http://www.brides.org/perl/ppm を追加
(2) ppm を起動
(3) Tk をインストール
(4) Devel-ptkdb をインストール


ちなみに、Package Manager の ppm プロンプトを出す方法は、
ppm-shell なんだって!
ppm って入れても設定ウィンドウが出るだけだから、
なんでだろう?って悩んじゃったよ。

動かしてみる


お試しで以下を実行してみる。
ちゃんと実行できたらおk。
perl -d:ptkdb -e 1


おおーこれは便利だー(^-^)
いまひとつ使い方が直感的ではないものの、
それほどボタンが多いわけでもないので、
ヒューリスティックに覚えていけると思う。
マウスじゃなくて、キーボードで操作できたら、楽なんだけどなぁ。

起動するのに、いちいちコマンドラインで
perl -d:ptkdb source.pl

って入力すんのは面倒くさいので、
フォルダオプションから
右クリックのコンテキストメニューに追加。
でも、これだとエラー後すぐに DOS 窓 が消えてしまうので、
エラーが発生している場合には、メッセージが見えないという難点が…。
でも起動はすごくラクチンになった。

やっぱり問題は文字コードだ


日本語が出なくて、困った。
環境変数 PTKDB_CODE_FONT に「{MS ゴシック} 10」という文字列を
(MSとゴシックの間のスペースは全角で)
指定したのだが、日本語が表示できない。
(システム環境変数に設定すると再起動必須で面倒くさいので、
 個人の環境変数に設定した)
ソースは sjis で書いているが、
デバッガの I/O が win デフォルトの Unicode であるためだろうと思い、
ソースの先頭に
use encoding "shiftjis";

を追加したら解決。
改行コードは問答無用で crlf ということになっているらしい。

しかしまたここで問題が。
encoding プラグマを使用すると、
ソース中にハードコーディングしている全角文字パスが
開けなくなる。
そこで、以下のページを参考にして一件落着。
Windows 版 ActivePerl 5.8.X で日本語のファイル名を使う。
use Encode;
$file = encode('sjis',$file);  # デバッグのためいっぺん保存している
if(!open(INI, $file) { exit(-1); }  #エントリ投稿エラー回避のためカッコが全角です


でも以下はエラーになる。
if(!open(INI, "> $file") { exit(-1); }  #カッコが全角です

パーミッションは問題なしなので、原因不明。
なんでだー!?
なんかこう、なんつーか、面倒くさいな(怒
相対パスで半角を含まないように指定して、とりあえず逃げる
(全然解決になってない)。

内部コードと I/O の関係がまだ良くわかっていないので、
何をどのように直したら良いのか、実によくわからん。
孟獲孟獲って感じである(→「孟獲孟獲」についてググる)。
ソース自体を UTF-8 にすると、さっぱりして良いのかもしんないけど、
SQLServer とお話しなくちゃならず、
DB は SJIS で作ってあるので、
データ読み込むたびに UTF-8 に変換っつーのも、
激しく非効率だろうから、あまりやりたくない。
SJIS <-> euc-jp みたいなビット演算でできる変換ならまだしも、
UTF-8 変換にはどうしてもテーブルを使わざるを得ないので、
律速段階になりやすい。

Perl 5.8 系から、格段に文字コードの話がややこしくなってきたので、
そちらの方面に詳しくない方には非常に不評であるが、
個人的には、
やっと I/O が Java 並みに色々できるようになってきたなーという印象なので、
どっちかっつーと、歓迎。
問題は、明示的に指定しない場合の動作に、不明な点が多いことだろうと思う。
人柱さんがたくさん出ることでそのあたりがクリアになり、
定型化したお作法が決まってくれば、
それほど問題にもならんだろうと思う。

ptkdb の使い方についてはまた別途。
[PR]
by xiaoxia | 2007-11-22 21:48 | プログラム言語 | Comments(0)

今日は trac な日

ずっと trac のインストールやら、
カスタマイズやら。
上手く動かないときに、
原因が python なのか svn なのか sqlite なのか、
なかなか切り分けが難しいのであった。

今日ハマったことと、解決できたこと。

●svn 絡みの trac のエラーについて

Oops...

Trac detected an internal error:

というのが出た。

内容はこんな感じ。
原因は、svn/projcect 以下を手動でいじっちゃったため<ダメじゃん(>_<)
リポジトリのディレクトリが違うと言われているが、文字列上は同じ。
どうやら変更時刻とか、その手のユニークな ID もくっつけて
内部的なリポジトリ名にしているくさい。

2007-**-** **:**:**,121 Trac[main] ERROR: The 'repository_dir' has changed, a 'trac-admin resync' operation is needed.
Traceback (most recent call last):
File "D:¥TracLight¥python¥Lib¥site-packages¥trac¥web¥main.py", line 406, in dispatch_request
dispatcher.dispatch(req)
File "D:¥TracLight¥python¥Lib¥site-packages¥trac¥web¥main.py", line 191, in dispatch
chosen_handler = self._pre_process_request(req, chosen_handler)
File "D:¥TracLight¥python¥Lib¥site-packages¥trac¥web¥main.py", line 263, in _pre_process_request
chosen_handler = f.pre_process_request(req, chosen_handler)
File "D:¥TracLight¥python¥Lib¥site-packages¥trac¥versioncontrol¥api.py", line 73, in pre_process_request
self.get_repository(req.authname).sync()
File "D:¥TracLight¥python¥Lib¥site-packages¥trac¥versioncontrol¥cache.py", line 82, in sync
raise TracError("The 'repository_dir' has changed, "
TracError: The 'repository_dir' has changed, a 'trac-admin resync' operation is needed.


'trac-admin resync'をやれと書いてあるが、そのままコピペしてもダメ。
http://trac.edgewall.org/ticket/5207にある通り、
プロジェクトを指定する。
trac-admin /path/to/trac/project resync

注意するのは、第1引数は、svn/project ではなくて、trac/project である点。
これでキャッシュが再構築される。

このページ、trad-admin だよ、と教えられた人が、
trad というタイポをそのまま入力して
ダメでしたー、と答えているのがおかしい(笑)

● sqlite の schema

レポート用クエリのカスタマイズの例は載っているのだが、
今回、はカラム自体もカスタマイズしたので、
そちらも検索したいわけである。
カスタムクエリで GUI から設定できるのだが、
これは保存ができないので、
保存できるクエリという形にしておきたい。
そのためには SQL を書かねばならんのだが、
schema がどこにも載ってない。
schema がわからないで、どうやって SQL 書くんだYO!?というわけで、
色々探してやっと見つけた。

DOS のコマンドプロンプトから
c:¥> sqlite trac.db
sqlite> .schema

こんだけ。
こんだけのことにものすごく彷徨ったよorz
まぁハマるというのは、概してそういうものなのだが。

SQL はあんまり書いたことがなくて、
インストール後のデフォルトで DB 作って TABLE 作って、
INSERT でぶち込んで、簡単に SELECT、みたいなことしか
やったことがない。
なわけで、実はよく知らない。
チューニングとかしないと、DB の良さはわからないんだろうけどね。

で、今回はカスタマイズしてカラムを増やしたので、
そいつらが別 DB に保存されており、
LEFT OUT JOIN をする必要があるらしい。
絵ではわかる。
□=□←□って感じでしょ。
でも自分で書いてみるとうまくいかないのね。
しばらく格闘する予定。

● Trac について

実際に使っているのは Windows 版 Trac だけ。
本当の Trac はインストールなんかが面倒くさいので、
「Trac月」(とらっくらいと)の方を使ってる。
本当に、ほんの数分で環境ができあがります。
Subversion との連携もばっちり。

中身が Python というのが、ちょっとカスタマイズしづらい感じだが、
普通に使う分には、カスタマイズは Web GUI からなので、
あまり困らないと思う。
[PR]
by xiaoxia | 2007-11-09 18:12 | ソフトウェア | Comments(0)

ダメ女プログラマ&主婦&腐女子&バイオリン弾き


by 小霞