私はPythonのtrace
モジュールを使用していくつかのコードをトレースしています。この方法でコードをトレースすると、次の2つの結果のいずれかが得られます。
電話:
tracer = trace.Trace(count=False, trace=True, ignoredirs=[sys.prefix, sys.exec_prefix])
r = tracer.run('run()')
tracer.results().write_results(show_missing=True)
結果:
<filename>(<line number>): <line of code>
[引用]を呼び出す:
tracer = trace.Trace(count=False, trace=True, ignoredirs=[sys.prefix, sys.exec_prefix], countfuncs=True)
r = tracer.run('run()')
tracer.results().write_results(show_missing=True)
結果:
filename:<filepath>, modulename:<module name>, funcname: <function name>
私が本当に必要としているのは、これを与えるトレースです。
<filepath> <line number>
上記の情報を使用し、それらをインターリーブして必要なものを取得できるように見えますが、次のユースケースではそのような試みは失敗します。
sys.path
A
ディレクトリとディレクトリが含まれていますB
。- 2つのファイルが
A/foo.py
あり、B/foo.py
- 両方とも、 100行目から120行目で定義された関数
A/foo.py
を含みますB/foo.py
bar
- との間にはいくつかの小さな違いが
A/foo.py
ありますB/foo.py
このシナリオでは、このようなインターリーブを使用して、bar
呼び出されたものを正しく識別することは、各内のコードを静的に分析しない限り不可能です(間違っている場合は修正してください)bar
。これは、重要な機能にとっては非常に困難です。
では、どうすれば必要な正しいトレース出力を取得できますか?