MacOSX Xcode Instruments非常适合分析本机代码。但是,我的callstacks中还有很多Python调用。我可以以某种方式使仪器具有Python感知能力吗?
我能想到的一个解决方案是,当它看到一些PyEval_EvalFrameEx
框架时,它会在其局部变量/参数中查找以分隔不同的Python调用并向我显示一些调用信息。
我不是只询问Python分析器。我想描述我的本机代码。但是在这个本机代码分析中,我想添加一些进一步的智能来分析和翻译Python堆栈帧。
答案 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