MacOSX Xcode Instruments非常适合分析本机代码。然而,我的callstack中也有大量的Python调用。我能以某种方式让Instruments支持Python吗?
我能想到的一种解决方案是,当它看到一些Python帧时,它会在其本地变量/参数中查找,以分隔不同的PyEval_EvalFrameEx调用,并向我显示一些调用信息。
我问的不仅仅是一个Python分析器。我想分析一下我的本机代码。但是在本机代码分析中,我想添加一些进一步的智能来分析和转换Python堆栈帧。
发布于 2015-07-29 14:13:30
根据该stackoverflow answer,仪器是dtrace的图形用户界面前端。Big Nerd Ranch上有Apple Documentation证实了这一点,还有一些关于dtrace的OS-X特定文章。
可以在编译CPython源代码之前将其应用于dtrace,以便对其进行检测。看起来在homebrew中已经或者曾经支持使用dtrace自动构建一个新的python,但是现在通过谷歌搜索,我找不到当前python版本(2.7.10,3.4/3.5)中支持dtrace提供者的自制食谱的参考资料。我还没有尝试过,所以可能当前的方法只是在构建时使用--with-dtrace开关。
有一个来自Python2013的演讲:dtrace, Python and You,它谈到了如何安装一个包含dtrace支持的PyTexas (特别是在Mac上演示),并在命令行上使用dtrace。
我认为,一旦安装了支持dtrace的python,在运行它时,您应该能够在Instruments中看到并使用它。如果要将python解释器添加到OS X应用程序中(作为.framework或其他形式的链接),如果该python在编译之前应用了dtrace补丁,我也认为可以在dtrace中使用它。这两种方法我都没试过,但根据我对dtrace的了解,我相信它应该可以工作。如果我确认这是真的,我会回帖的。
发布于 2014-12-10 05:03:35
没有MacOSX工具来分析Python代码。就我个人而言,我使用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 )或其他类似工具。基本上,您可以将Python脚本包装在strace调用中,您将能够查看所有的“本机”C/C++调用。对于其他linux系统,请使用:
strace -fetrace=open python your_script.py或者,如果您使用的是Mac OSX:
dtruss -f -t open python your_script.py我希望这能帮到你!
发布于 2015-07-16 01:35:44
有一个很棒的新图形用户界面分析器,叫做PyVmMonitor。我还没有成功地将它附加到我正在运行的应用程序中,但我已经使用它从命令行生成和分析配置文件,如下所示:
python /Applications/PyVmMonitor.app/Contents/MacOS/public_api/pyvmmonitor --profile=yappi my_app.pyhttps://stackoverflow.com/questions/21039273
复制相似问题