2014-01-10 66 views
23

MacOSX Xcode Instruments非常適合分析本機代碼。不過,我的調用堆棧中還有大量的Python調用。我能以某種方式使儀器感知Python嗎?MacOSX儀器來分析Python代碼

我能想到的一個解決方案是當它看到一些PyEval_EvalFrameEx框架,它在它的局部變量/參數中查找來區分不同的Python調用並顯示一些調用信息。

我不是在問只是一個Python探查器。我想分析我的本地代碼。但是在本機代碼分析中,我想添加一些更多的智能來分析和翻譯Python堆棧幀。

+2

你試過了嗎[RunSnakeRun](http://www.vrplumber.com/programming/runsnakerun/)?我個人從未使用過它,但它似乎是你正在尋找的東西。 – KronoS

+0

@KronoS:我想我已經看到cProfile和出口商的KCacheGrind類似的解決方案。但是:(1)我也希望看到本地C代碼配置文件,即兩者結合。 (2)我也特別想。使用Xcode Instruments。 – Albert

+1

也許我不完全明白你在問什麼,但也許你可以用'python -m cProfile myscript.py'運行你的腳本?然後,您可以將輸出保存到日誌文件 – ollien

回答

-1

沒有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 OSX)或其他類似的工具。基本上,您可以將您的Python腳本包裝在strace調用中,並且您將能夠查看所有「本機」C/C++調用。 對於其他Linux系統使用:

strace -fetrace=open python your_script.py 

,或者如果你是在Mac OSX:

dtruss -f -t open python your_script.py 

我希望這有助於!

+0

這不是問題。問題是關於本地代碼。 – Albert

+0

如果您正在尋找原生級別的電話。那麼你應該轉向'strace'或者其他類似的工具。基本上你可以用'strace'調用你的Python腳本,你將能夠查看你所有的「本地」C/C++調用。 – tricklepie

+0

那麼,如何在'strace'中看到Python調用呢?我不只是想在那裏看到'PyEval_EvalFrameEx',我想看看真正的Python函數。 (另外,我問的不是關於'strace',而是關於MacOSX Instruments,但這不重要。) – Albert

0

有一個偉大的新的GUI分析器,稱爲PyVmMonitor。我還沒有成功地得到它附加到我正在運行的應用,但我一直在使用它來生成並分析來自這樣的命令行配置文件是:

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

根據這一stackoverflow answer,儀器是一個GUI前端到dtrace。有Apple Documentation確認這個和其他地方的Big Nerd Ranch dtrace上的一些OS-X特定的文章。

patches可以應用到CPython源,然後編譯它爲dtrace儀器。看起來有或曾經支持在homebrew用dtrace自動構建一個新的python,但現在使用google搜索,我沒有找到dtrace提供程序支持當前python版本的自制食譜的參考(2.7.10,3.4/3.5)。我沒有試過,所以也許現在的配方只適用於--with-dtrace開關。

PyTexas 2013有一場演講:dtrace, Python and You討論瞭如何獲得包含dtrace支持的python安裝(特別是用Mac演示)以及在命令行上使用dtrace。

我認爲一旦你安裝了dtrace支持的python,運行它時,你應該能夠在Instruments中看到並使用它。如果您將一個Python解釋器添加到OS X應用程序中(或者作爲一個。框架或其他形式的鏈接),如果該python在編譯之前應用了dtrace補丁,我還會認爲它可以在dtrace中使用。我既沒有試過,但根據我對dtrace的瞭解,我相信它應該可以工作。如果我確認這是真的,我會回覆。