PDB を使用してモジュールをトレースできることと、先頭に ! を付けることで pdb から任意のコマンドを実行できることを知っています。(例!"foo".upper()
)。
これらの機能を組み合わせて、現在のコンテキストで実行された任意のコマンドをトレースする方法はありますか? たとえば、そのようなstep !"foo".upper()"
ことで、メソッドをステップスルーしてupper
から、以前のコンテキストに戻ることができますか?
使用するpdb.runcall
(Pdb) pdb.runcall(func, *args, **kwds) # e.g. pdb.runcall(myfunc, arg1, arg2)
(nまたはs)でステップスルーするか、ブレークポイントを設定します
(Pdb) b my_module.py:123 # b ([file:]lineno | function) [, condition]
「c」を押してブレークポイントまで実行します。
例で使用したstr.upperのような組み込み関数をトレースすることはできません。
編集:現在のコンテキストも要求しました:現在のコンテキスト
でユーザー定義関数を使用して式を評価およびデバッグできます。例:
pdb.runeval("[myfunc(x) for x in range(3)]", globals(), locals())
# or with ... some_module.globals())
パラメータがないと、式はモジュールコンテキストで評価されるか、locals()なしで使用された場合は現在のモジュールコンテキストで直接評価されますが、通常のように現在のグローバルおよびローカルコンテキストではglobals(), locals()
評価されないため重要です。__main__
!expression