L'Isola di Niente
L'Isola di Niente » Gedit Tips » Gedit で Python スクリプトを debug

Gedit で Python スクリプトを debug

Python スクリプトを書くのに私はすべて Gedit で行っている。
スニペットがあるのでコード補完はいらない、けど F5 でデバッグ開始くらいはやりたい。
VC++ のデフォルトが F5 だったので...
ということで外部ツールを設定してみました、gedit って本当に高機能。

2017.03.16 : シバン実行の追加、画像の最新版化
2014.01.04 : Python 関連記述を Python3 に変更
2012.03.04 : 画像を GNOME3 に変更とコードをシンプル化

設定

アプリケーションメニューで設定ダイアログを開き「プラグイン」タブを選択。
「 外部ツール 」を有効にしてダイアログを閉じます。

アプリケーションメニューに [Manage External Tools...] が追加されているはず、選択。
ダイアログの「+」ボタンを押しテキトーな名前を指定、そしてコマンドに
#!/bin/sh

# シバンがあるならソレで起動、無いなら ContentType 判別

h=`head -n1 $GEDIT_CURRENT_DOCUMENT_PATH`
if [[ $h = \#\!* ]]; then
    app=${h#*\!}
    echo $app $GEDIT_CURRENT_DOCUMENT_PATH
    $app $GEDIT_CURRENT_DOCUMENT_PATH
else
    echo @ContentType $GEDIT_CURRENT_DOCUMENT_TYPE
    if [[ $GEDIT_CURRENT_DOCUMENT_TYPE = *python ]]; then
        python3 $GEDIT_CURRENT_DOCUMENT_PATH
    elif [[ $GEDIT_CURRENT_DOCUMENT_TYPE = *javascript ]]; then
        gjs $GEDIT_CURRENT_DOCUMENT_PATH
    elif [[ $GEDIT_CURRENT_DOCUMENT_TYPE = *shellscript ]]; then
        sh $GEDIT_CURRENT_DOCUMENT_PATH
    elif [[ $GEDIT_CURRENT_DOCUMENT_TYPE = *vala ]]; then
        vala $GEDIT_CURRENT_DOCUMENT_PATH
    elif [[ $GEDIT_CURRENT_DOCUMENT_TYPE = *csrc ]]; then
        src=`head $GEDIT_CURRENT_DOCUMENT_PATH`
        case $src in
            *gtk.h*)
                echo "Gtk Build"
                gcc $GEDIT_CURRENT_DOCUMENT_PATH `pkg-config --cflags --libs gtk+-3.0` ;;
            *glib.h*)
                echo "GLib Build"
                gcc $GEDIT_CURRENT_DOCUMENT_PATH `pkg-config --cflags --libs glib-2.0` ;;
            *)
                echo "Gcc Build"
                gcc $GEDIT_CURRENT_DOCUMENT_PATH ;;
        esac
    else
        echo Non Support File
    fi
fi

を書き込み残りは下記のように指定する、Shortcut Key は F5 ね。
$GEDIT_CURRENT_DOCUMENT_PATH
$GEDIT_CURRENT_DOCUMENT_TYPE
についてはヘルプをお読みください。

img/gedit_debugging.png

コレを閉じて Python デバッグ用設定はおしまい。

動作

Ctrl+F9 でボトムペインを表示切り替えができます。
F5 を叩くと勝手に表示されるので閉じたままでかまいません。

さて外部ツールを使ってみます。
まずは print や例外でどうなるか、こんなコードで。
#!/usr/bin/env python3

print("Start")

# 意図的に例外になるように
print(17 + "歳の女子高校生")

# 当然以下は表示されない
print("End")

実行したいコードをアクティブにした状態で先ほど指定した F5 を押す。

img/gedit_debugging2.png

のようにボトムペインが標準出力先になり端末上で行うのと同様に表示されます。
例外になるとシェルの出力に例外情報が行番号付きで出力されます。
無理に端末と行ったり来たりしなくても gedit のみでこれが可能である。
ただし入力はできませんのであしからず。

次に GUI アプリではどうなるか。
私が公開している Comipoli で試してみる、実行ファイルである comipoli を開いて F5

img/gedit_debugging3.png
見事ウインドが表示され待機状態になりました。
この状態でコードを編集しても反映されませんので注意。
ウインドウを閉じて終了させると done が出力されます。

他に私がよく利用するのは PyGObject でメソッドのチェック。
#!/usr/bin/env python3

from gi.repository import Gtk
print(dir(Gtk.Window))
PyGObject から Gtk はドキュメントが無いので GTK+ 3 Reference Manual が頼り。
PyGObject でどう書けばいいかは dir() で辿って調べていく、私はそうやった。
Python の print はとりあえず何でも文字列で出力できるので可能な技である。
Copyright(C) sasakima-nao All rights reserved 2002 --- 2017.