2012-12-13 8 views
7

ビジュアルデバッガを構築して、式の評価の仕方(サブ式がどのように評価され、Excelの式評価ビジュアライザのような値で置き換えられるかを学生に見てもらうのに役立ちます)。Pythonの式評価プロセスをどのように進めるのですか?

このプロセスをPythonのpdbで実行することはできません。細かいステップの細かさはコード行です。何らかの形でPythonバイトコードをステップ実行することは可能ですか?他のアイデアはどのようにこの目標を達成するために?

EDIT:CPython標準ライブラリの上に構築できる軽量ソリューションが必要です。

+0

pythons cレベルデバッガ[gdb](http://wiki.python。org/moin/DebuggingWithGdb)? –

+0

@ X.Jacobs - 私はCPythonのデフォルトディストリビューションに基づいて構築できるソリューションが必要です。これはWindowsとLinuxの両方で動作するはずです。 – Aivar

+0

[GDB 7の新しいPython拡張機能サポートを使用したC/C++とCPythonのデバッグ](http://misspent.wordpress.com/2012/03/24/debugging-cc-and-cpython-using-gdb-7s-new –

答えて

1

に貢献できる - 私は楽器のコード(またはAST)の可能性A内のすべての(サブ)式をラップすることにより、ダミーのメソッド呼び出しは、引数を返す以外の何もしません。例えば。

x = f(sin(x + y)) 

私は各部分式が評価されますし、私も値を取得した後に通知されるように保証しています。この方法で

x = dummy(f(dummy(sin(dummy(dummy(x) + dummy(y)))))) 

になります。私はまた、例えば、式の一部が現在扱っているかについての余分な場所/ AST情報を追加することができます。

... dummy(x, line=23, col=13, length=1) ... 

は、残念ながら、これは

+0

こんにちは!私はあなたと同じ問題を解決しているようだ:)あなたは[私の質問]を見てみることができますか(http://stackoverflow.com/questions/40639652/tracing-python-expression-evaluation-step-by-ステップ)。賞金があります。ここで説明したコードの一部を探しているようです。私はあなたのThonnyソフトウェアのコードを掘り下げようとしています(私はJupyterと相互運用することを望んでおり、完全なデバッガを望んでいませんが、現在はThonnyを使いたくありません)。より良いことをしてください:) –

+0

@ IlyaV.Schurov、関連コードはhttps://bitbucket.org/plas/thonny/src/master/thonny/backend.py?at=master&fileviewer=file-view-default、多分あなたですそこから何かを再利用することができます。 Python ASTには、それぞれの場所に関する十分な(正しい)情報が含まれていないため、おそらくhttps://bitbucket.org/plas/thonny/src/master/thonny/ast_utils.py?at=master&fileviewer=file-view-defaultも必要ですASTノードはコード内にあります。 – Aivar

+0

ありがとう!あなたは[私の質問](http://stackoverflow.com/questions/40639652/tracing-python-expression-evaluation-step-by-step)にあなたの答えをコピーして、私に可能な賞金の受賞者として考えさせてください。 –

1

pdbを使用すると、任意の関数呼び出しを実行できます。他の文の場合、pdbは行内の関連する名前の値を出力できます。あなたが探している追加の機能は何ですか?

リスト内包のようなものにステップインしたいのであれば、それは単一のオペコードであるため純粋なPythonの観点からは機能しません。ある表現では、生徒に教える必要があります。これはPythonがCの実装に入り、これを評価するところです。 ''

+0

問題は、回線上に複数の関数呼び出しがある場合です。この行で「ステップ」コマンドを選択すると、それらの関数の1つで自分自身を見つけることができます。 Pythonがすべての関数を踏襲していれば、式を事前に解析して関数呼び出しが評価される順序を調べることができました。これは、現時点で評価中の部分式を追跡するのに役立ちます。しかし残念ながら、Pythonは組み込み関数/ Cにステップインしておらず、構文上、それらの関数呼び出しはユーザ定義関数への呼び出しと区別できません。 – Aivar

+0

「s」を押し続ける限り、すべての機能にステップインします。そして、「Pythonは組み込み関数にステップインしない」というあなたの苦情は、まさに私の指摘です。ある時点で、あなたはCに下がり、それに対処する方法が必要です。それはgdbや完全に何か他のものかもしれませんが、それはいつも起こります。 – jknupp

+0

私はCの関数に入る必要はありません、私は元の表現のどこにいるのかを知りたいだけですが、Pythonはこれを教えてくれません(私の他の質問を参照してください:http://stackoverflow.com/questions/ 13952022 /)。私は関数のエントリの数を数え、自分自身の位置を追跡することができますが、関数呼び出しのいくつか(未知数)がトレーサによって無視されるという事実は、私の計算システムを破壊します。 – Aivar

1

あなたはreinteractをチェックアウトする必要があり、私も自分のソリューションのアイデアを持っている、それは非常に簡単だとあなたはその

2

あなたはpudbを試してみました... ASTとコンパイルいじりが必要ですか? debian-等に http://pypi.python.org/pypi/pudb : のpython-pudb

をインストールapt-getのそれはPDBに取り付けるので、私は、これはあなたが探しているものではありませんね。あなたが関数内でステップする場合、少なくとも、明らかにあなたがしているどちら表示されます

学生を教えるため、あなたがすることができ可能性が何か:。

  • まず、構成変数を使用して、プログラムを書きますプロセスが十分に理解されると
  • デバッグどちらかまともなのpythonデバッガ(PDB、winpdb、pudbを...)を使用して、このプログラムは、
  • 、いくつかの手順を使用して、少数のにコードを組み合わせることで、一時的な変数を取り除きますあなたが最終的なコードに来るまで、徐々に、行を追加します。

私は知っていますが、それは完璧ですが、これは私が考えることができる最高の時点です。

関連する問題