MacOSX Instruments用于分析Python代码

Alb*_*ert 25 python macos instruments xcode-instruments

MacOSX Xcode Instruments非常适合分析本机代码.但是,我的callstacks中还有很多Python调用.我可以以某种方式使仪器具有Python感知能力吗?

我能想到的一个解决方案是,当它看到一些PyEval_EvalFrameEx框架时,它在其局部变量/参数中查找以分隔不同的Python调用并向我显示一些调用信息.

我不是在问一个Python分析器.我想描述我的本机代码.但是在这个本机代码分析中,我想添加一些进一步的智能来分析和翻译Python堆栈帧.

tri*_*pie 2

没有 MacOSX 工具可以分析 Python 代码。就我个人而言,我使用 cProfile。它是一个名为 的内部分析器cProfile。您可以通过以下任一方式使用它:

import cProfile
cProfile.run('print "Hello World!"')
Run Code Online (Sandbox Code Playgroud)

或者

python -m cProfile your_own_script.py
Run Code Online (Sandbox Code Playgroud)

结果会是这样的:

>>> cProfile.run('print "Hello World!"')
Hello World!
         2 function calls in 0.000 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.000    0.000 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
Run Code Online (Sandbox Code Playgroud)

编辑:如果您正在寻找本机级别的调用。然后您应该转向strace(对于 Linux)和dtruss(对于 Mac OSX)或类似的其他工具。基本上,您可以将 Python 脚本包装在调用中strace,并且您将能够查看所有“本机”C/C++ 调用。对于其他linux系统使用:

strace -fetrace=open python your_script.py
Run Code Online (Sandbox Code Playgroud)

或者如果您使用的是 Mac OSX:

dtruss -f -t open python your_script.py
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!