72

タスクを実行するためのスクリプトがたくさんあります。そして、それは非常に混乱しているので、私は本当にプロジェクトのコールグラフを知る必要があります。追加のHWとSWが必要なため、コードを実行できません。ただし、その背後にあるロジックを理解する必要があります。したがって、トレースやPythonパーサーの代わりにモジュールを使用してコールグラフを作成できるツール(Pythonファイルの実行を必要としない)があるかどうかを知る必要があります。私はC用のそのようなツールを持っていますが、Python用ではありません。
ありがとうございました。

4

8 に答える 8

32

あなたはpycallgraphをチェックアウトしたいかもしれません:

pycallgraph

また、このリンクでは、より手動のアプローチについて説明しています。

理解とリファクタリングのための呼び出しグラフの生成-python-code

于 2012-12-20T00:32:08.957 に答える
5

つまり、そのようなツールは存在しません。Pythonは言語が非常に動的であるため、コードを実行せずにコールグラフを生成することはできません。

Pythonの非常に動的な機能のいくつかを明確に示すコードを次に示します。

class my_obj(object):
    def __init__(self, item):
        self.item = item
    def item_to_power(self, power):
        return self.item ** power

def strange_power_call(obj):
    to_call = "item_to_power"
    return getattr(obj, to_call)(4)

a = eval("my" + "_obj" + "(12)")
b = strange_power_call(a)

evalのインスタンスを作成するために使用しており、そのメソッドの1つを呼び出すためにmy_objも使用していることに注意してください。getattrこれらは両方とも、Pythonの静的コールグラフを作成することを非常に困難にする方法です。さらに、モジュールをインポートする方法を分析するのは難しいあらゆる種類があります。

あなたの最善の策は、コードベースと紙のパッドを持って座って、手でメモを取り始めることだと思います。これには、コードベースに慣れることができるという二重の利点があり、解析が難しいシナリオに簡単にだまされることはありません。

于 2012-12-20T00:24:39.430 に答える