私のpythonデバッガーには、文字列をファイル名に再マッピングする方法があります。これにより、デバッガー内でexec'd関数をステップスルーするときに、pygmentized行をリストしたり、realgudを介してEmacsなどのエディター内でそれらを表示したりできます。
そのため、CPython が評価中に停止したときに、exec ステートメントで文字列を抽出できるようにしたいと考えています。
呼び出し元が であったEXEC_STMT
かどうかを確認するために呼び出しフレームを振り返ることができるメカニズムが既にあり、前の命令が say であったかどうかを確認するために 1 つの命令を振り返ることができますDUP_TOP
。したがって、呼び出し時にスタック エントリを読み取る方法を見つけて、文字列を評価することができれば、私は家にいることができます。これを取得するために C にドロップする方法はおそらくありますが、CPython の内部構造に関する私の知識が不足しているため、これを行うことは避けたいと考えています。そこにパッケージがある場合は、オプションで含めることができます。
CPython はすでに関数の引数とローカル変数へのアクセスを提供していますが、もちろんこれは組み込み関数であるため、関数のパラメーターとして記録されません。
同じことを行う方法について別の考えがあれば、それも問題ありません。exec
デバッガーはゲームの後半に持ち込まれる可能性があるため、どういうわけかオーバーロードまたは置換を試みることは、あまり良い解決策ではないと思います。
ここでは、CPython2 と CPython3 が少し異なる可能性があることは理解していますが、最初はどちらでも構いません。