2011-01-26 9 views
2

私はDLLを作成するプロジェクトを持っています。これらのdllは後で特別なプラグインシステムblue-skyによってpythonから呼び出されます。このプロジェクトでは、実行可能ファイルを作成するのは非常に難しいですが、プロファイリングが必要です。純粋なdllで動作するプロファイラはありますか?純粋なDLLをどのようにプロファイルすることができますか?

私はインテルアンプを試しましたが、Microsoft VS2008プロファイラは動作しません。私はまた非常に眠気を試みましたが、その機能は限られています。

答えて

1

dllがPythonによって読み込まれている場合は、Pythonプロセスをプロファイルする必要があります。すべての.pdbファイルが存在する限り、Microsoftプロファイラでは、DLL内のシンボルを解決する必要があります。もう1つの選択肢は、関心のある機能をロードして呼び出す実行可能ファイルを作成し、次にその実行可能ファイルをプロファイルすることです。

など。 /attach:"python.exe vsperfcmd

:あなたは.dllファイルをロードしているあなたのpythonプログラムを実行している「python.exe」プロセスを有することができ、あなたはによってそれにVisual Studioのコマンド・ライン・プロファイラを添付することができます"

1

実行されていないコードはプロファイリングできません。プロファイリングの定義です。 DLLにリンクして実行できるもの(実行可能ファイル)を作成して使用する必要があります。

+0

実際にはこれらのDLLからのコードが実行されている可能性がありますプロファイルはありますか? DLLへのリンクは非常に難しいです。なぜなら、PythonからC/C++にすべてのプラグインローダーシステムを書き直さなければならないからです。 – MaXal

+0

実際はそれほど難しくありません。 OSはDLLのロードを制御しています。 WindowsがDLLを読み込むと、依存関係がチェックされ、それらもロードされます。リンカにロードするDLLを渡すだけです。そのDLLから関数を呼び出す必要はありません。 Windowsは引き続き 'DllMain()'を呼び出します。 – MSalters

+0

それほど単純ではありません。 DLLは、そのタイプをこのシステムにエクスポートするため、特定の順序でロードする必要があります。私は詳細に行きたくはありませんが、実際には簡単ではありません。あなたが興味があるなら、あなたはチェックすることができます:http://sourceforge.net/projects/blue-sky/ – MaXal

関連する問題