4

PDB を使用してモジュールをトレースできることと、先頭に ! を付けることで pdb から任意のコマンドを実行できることを知っています。(例!"foo".upper())。

これらの機能を組み合わせて、現在のコンテキストで実行された任意のコマンドをトレースする方法はありますか? たとえば、そのようなstep !"foo".upper()"ことで、メソッドをステップスルーしてupperから、以前のコンテキストに戻ることができますか?

4

1 に答える 1

3

使用する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

于 2013-01-12T20:02:08.130 に答える