MacOSX用于评测Python代码的工具

MacOSX用于评测Python代码的工具,python,macos,instruments,xcode-instruments,Python,Macos,Instruments,Xcode Instruments,MacOSX Xcode Instruments非常适合评测本机代码。然而,我的调用堆栈中也有大量Python调用。我能让你知道吗 我能想到的一个解决方案是,当它看到一些PyEval_EvalFrameEx框架时,它会在其局部变量/参数中查找,以分离不同的Python调用,并向我显示一些调用信息 我问的不仅仅是Python分析器。我想分析我的本机代码。但是在本机代码评测中,我想添加一些进一步的智能来分析和翻译Python堆栈框架。没有MacOSX工具来评测Python代码。 就个人而言,我使用c

MacOSX Xcode Instruments非常适合评测本机代码。然而,我的调用堆栈中也有大量Python调用。我能让你知道吗

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


我问的不仅仅是Python分析器。我想分析我的本机代码。但是在本机代码评测中,我想添加一些进一步的智能来分析和翻译Python堆栈框架。

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

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

结果是:

>>> 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}
或者,如果您使用的是Mac OSX:

dtruss -f -t open python your_script.py

我希望这有帮助

有一个很棒的新GUI分析器,名为。我还没有成功地将它连接到我的跑步应用程序,但我一直在使用它从命令行生成和分析配置文件,如下所示:

python /Applications/PyVmMonitor.app/Contents/MacOS/public_api/pyvmmonitor --profile=yappi my_app.py
根据这一点,Instruments是一个GUI前端。在其他地方,还有一些关于dtrace的OS-X特定文章证实了这一点

在编译CPython源代码以对其进行dtrace测试之前,有一些方法可以应用于CPython源代码。似乎现在或过去都支持使用dtrace在中自动构建新的python,但现在通过谷歌搜索,我没有找到当前python版本(2.7.10、3.4/3.5)中支持dtrace provider的自制配方的参考资料。我还没有尝试过,所以可能当前的配方只是在构建时使用了一个
——带有dtrace
开关

有一篇来自PyTexas 2013的演讲:它讨论了如何在包含dtrace支持的情况下安装python(特别是在Mac上演示),并在命令行上使用dtrace


我认为,一旦安装了支持dtrace的python,在运行它时,您应该能够在工具中看到并使用它。如果将python解释器添加到OSX应用程序中(作为.framework或其他形式的链接),如果python在编译之前应用了dtrace补丁,我还认为它可以在dtrace中使用。我两次都没试过,但就我对dtrace的了解而言,我相信它应该会起作用。如果我确认这是真的,我会发回。

你试过了吗?我个人从未使用过它,但它似乎正是您所寻找的。@KronoS:我想我已经看到了类似的解决方案,用于cProfile和KCacheGrind的出口商。但是:(1)我还希望看到本机C代码配置文件,即两者的组合。(2) 我还特别想使用Xcode工具。也许我不完全理解您的要求,但也许您可以使用
python-mcprofile myscript.py
?然后您可以将输出保存到logfile@ollien:那么我看不到本机(C/C++/ObjC)函数调用。这不是问题所在。问题是关于本机代码。如果您正在寻找本机级别的调用。然后你应该移动到
strace
或其他类似的工具。基本上,您可以在
strace
调用中包装您的Python脚本,并且您将能够查看所有“本机”C/C++调用。那么,在
strace
中如何查看Python调用呢?我不仅仅想在那里看到
PyEval\u EvalFrameEx
之类的东西,我还想看到真正的Python函数。(另外,我问的不是strace,而是MacOSX仪器,但这不太重要。)我发现。不确定是否有用。这只在Python中有效,并打印Python堆栈跟踪。不确定这应该如何与
strace
等一起使用。
dtruss -f -t open python your_script.py
python /Applications/PyVmMonitor.app/Contents/MacOS/public_api/pyvmmonitor --profile=yappi my_app.py