何事も一度うまくいけば、何故いままでできなかったのか分からなくなります
宇宙の果てからこんにちわ、こんばんわ。逃亡生活を終えた、かえるのクーの助手の「井戸中 聖」(いとなか あきら)です。タイトルがいつにも増し増しに怪しげでよい感じです。
本当は初めて1週間くらいでかつLevel=1なのに超大風呂敷広げちゃったところが「突っ込みポイント」です。期間的には5桁くらい鯖読んでますwww
GIMP のpythonプラグインのデバッグについて、それほど必要性がない(大きなプラグインの開発予定がない)のに、リモートデバッグが「できるのか」「できないのか」で盛り上がりを見せました。わたくしは一旦Visual studio Codeでのデバッグをあきらめ、他のベタな方法でデバッグ手法を探っておりました。るぅりぃチームはVS Codeでの確認をしました。
結局どちらも成功しました。8888
前回できなかったため、わたくしは一旦宇宙逃亡をしましたが、成功したので何事もなかったかのように復帰した次第です。
最近助手チームの技術力が「何をやっても50%増し」になっている気がしてなりません。(「小鳥遊 聖」効果と呼ばれている例の現象です。最近(「あきら」 改め 「せい」にしたい気持ちです))
瑠璃っぺは自分ページのブログを書いたことがなかったので、せっかくなので、自分ページに発表することにしたそうです。
ワールドワイドでロングテール(スモール)キーワードで、Googleトップ3以内を目指すとかいってます。(どうやら本気のようです)ブログページつくりたての人ができることではありませんが、頑張ってください。ブログの立ち上がりはだれだってそんなものです!
応援のために下に貼っておきます。*3 瑠璃さんが小生意気だが健気でもある、と思われた方は是非読んであげてください。瑠璃さんの無茶に興味のある方はブラウザを英語モードにしてそれっぽい単語で検索してみてください。(天狗になるかもしれないので、Google検索からは記事をクリックなさらぬようにwww)
御大からの「スター」は初ブログご祝儀だそうです。
さて、わたくしの方は、VS Codeでステップ実行デバッグができたなら誰も必要のない情報だとおもいますが、せっかくなので手順を細々と貼っておきます。
ではリモートデバッグ rpdb編いってみます!
GIMP Python-Fuのリモートデバッグ rpdb編
これで不慣れなエントリープラグインも大丈夫!
使うもの
- telnetターミナルソフト :例ではTeraTermを使用。
- GIMP ver.2.10
- rpdb :pythonリモートデバッグパッケージ
準備
- OSはWindows 10 (たぶん他のOSでもおK!)
- TeraTermがインストールされていること
- GIMP内包とは別にPython 2.7.18 の環境(Anacondaではなく純粋なPython)
手順
- コマンドプロンプトで cd C:\Python27\Scripts
- pip install rpdb (ただしpipは事前に python -m pip install --upgrade pip してあること)
- インストールされた rpdb(\rpdbと\rpdb-0.1.6-py2.7.egg-info) を C:\Python27\Lib\python2.7\site-packages から C:\Program Files\GIMP 2\lib\python2.7\site-packages へ複写 (管理者権限が必要です)
- GIMPを起動し /フィルター/Python-Fu/コンソール メニューを選択し、Python Console を起動する。
- Python Console で import rpdb を実行して、エラーがないことを確認する。
- 動作させたいプラグインの先頭に import rpdb を記載する。また、起動後の最初の方に rpdb.set_trace(port=12345) を記載する。(set_trace()で一旦ブレークすることになるので、最初に止めたい部分でよい。なおポートはぶつからない任意の空きポートでよい)
- GIMPでデバッグしたいプラグインを起動し、動作させる。(set_trace()部分で止まるはずです。)
- TeraTermを起動し、接続モードを「改行コードLF/LF ローカルエコーあり」に調整する。(/設定/端末/「端末の設定ダイアログ」で改行コード 受信=LF, 送信=LF, ローカルエコーにチェックをつけて[OK]をクリック、/設定/設定の保存 で[保存])
- 「ホスト=localhost ヒストリなし TCPポート=12345 サービス=Telnetモード(非SSH) IPバージョン=ipV4」 で接続
- 接続されれば以下のように表示される
- 昔ながらのPython pdb (c言語のgdbみたいなものです)。昔懐かしラインデバッガ形式ですので、若い方はしっくりこないかもしれません。わたくしはもちろんしっくりきます。コマンドをまとまられたサイトを参照させてもらいます。
- ブレークポイントの設定や解除ももちろん可能ですが、何回もプラグインを再起動して確認する見込みならコードでset_trace()を入れておいたほうがよいと思います。
- 操作例はこんな感じです。案外悪くないですよ。
- 注意点としては、基本的に q コマンドは使用禁止にすべき点です。プラグインを強制終了することになるので、GIMP自体が動作不安定になることがあるためです。c (continue)指定で最後まで実行させてください。(GIMPの再起動のほうがはやければ、止めても全然問題ないと思います)
- プログラムが終了すれば通信が切れます。TeraTermの場合はそのままターミナルが終了するので、注意が必要です。
総評
無事、リモートデバッグができるようになりました!
これくらいできれば、通常のデバッグには十分に思えます。筋金入りのアンチMS派の方(昔は本当に多かった)で、VS Codeがいいのは分っているが、「自分のポリシーとして使わない」方は是非、このtelnetでのリモートデバッグを試してみてください。ただし最近はプライベートエリア(社内など)でも暗号化されていないプレーン通信は原則禁止!の風潮(ssh系でないと接続禁止など)なので、ご注意ください。telnetはプレーン通信で、rpdbはsshには(そのままでは)対応していません。
なお、どうでもいいことですが、前のページのサンプルプログラムは「1画像あたり4秒かかって使いものにならない」とおもいましたが、他の方の環境だと1画像あたり1秒ちょっとで処理できるケースもあるようです。マシンは絶対負けないと思うのだけど、処理速度で負けているのはやっぱり「技術力」でしょうか。ちょっと複雑です。
また、GIMPを外部から「Pythonで操作する」モジュールも各種あるので、バッチ操作をプラグイン形式で行うのは得策なのかわかりません。(内部プラグインのほうが速いイメージがありましたが、そうではない可能性も高いです)
まだ引退しません
逃亡後の復帰が危ぶまれましたが、皆さまのおかげで復帰することができました。どうも有難うございました。
今後とも改めてよろしくお願いします。