MacOSX Instruments用于分析Python代码

时间:2014-01-10 08:25:03

标签: python macos instruments xcode-instruments

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

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

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

3 个答案:

答案 0 :(得分:2)

根据这个stackoverflow answer,Instruments是dtrace的GUI前端。有Apple Documentation在其他地方Big Nerd Ranch确认了这个和一些关于dtrace的OS-X特定文章。

patches可以应用于CPython源,然后再编译它来为dtrace设置它。似乎已经或曾经支持在homebrew中使用dtrace自动构建新的python,但是现在谷歌搜索,我没有找到对于当前python版本的dtrace提供程序支持的自制程序配方的引用( 2.7.10,3.4 / 3.5)。我没有尝试过,所以当前的配方可能只适用于--with-dtrace开关。

有一篇来自PyTexas 2013的演讲:dtrace, Python and You讨论了如何使用dtrace支持进行python安装(特别是用Mac演示),并在命令行中使用dtrace。

我认为一旦你安装了dtrace支持的python,在运行它时,你应该能够在Instruments中查看和使用它。如果您正在向OS X应用程序添加python解释器(作为.framework或其他形式的链接),如果该python在编译之前应用了dtrace补丁,我也会认为它可用于在dtrace中工作。我也没试过,但考虑到我对dtrace的了解,我相信它应该有效。如果我确认这是真的,我会回复。

答案 1 :(得分:0)

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

import cProfile
cProfile.run('print "Hello World!"')

python -m cProfile your_own_script.py

结果如下:

>>> 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}

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

strace -fetrace=open python your_script.py

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

dtruss -f -t open python your_script.py

我希望这有帮助!

答案 2 :(得分:0)

有一个名为PyVmMonitor的新的GUI分析器。我还没有成功地将它附加到我正在运行的应用程序上,但我一直在使用它来从命令行生成和分析配置文件,如下所示:

python /Applications/PyVmMonitor.app/Contents/MacOS/public_api/pyvmmonitor --profile=yappi my_app.py