MacOSX Xcode Instruments非常適合分析本機代碼。不過,我的調用堆棧中還有大量的Python調用。我能以某種方式使儀器感知Python嗎?MacOSX儀器來分析Python代碼
我能想到的一個解決方案是當它看到一些PyEval_EvalFrameEx
框架,它在它的局部變量/參數中查找來區分不同的Python調用並顯示一些調用信息。
我不是在問只是一個Python探查器。我想分析我的本地代碼。但是在本機代碼分析中,我想添加一些更多的智能來分析和翻譯Python堆棧幀。
MacOSX Xcode Instruments非常適合分析本機代碼。不過,我的調用堆棧中還有大量的Python調用。我能以某種方式使儀器感知Python嗎?MacOSX儀器來分析Python代碼
我能想到的一個解決方案是當它看到一些PyEval_EvalFrameEx
框架,它在它的局部變量/參數中查找來區分不同的Python調用並顯示一些調用信息。
我不是在問只是一個Python探查器。我想分析我的本地代碼。但是在本機代碼分析中,我想添加一些更多的智能來分析和翻譯Python堆棧幀。
沒有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
我希望這有助於!
這不是問題。問題是關於本地代碼。 – Albert
如果您正在尋找原生級別的電話。那麼你應該轉向'strace'或者其他類似的工具。基本上你可以用'strace'調用你的Python腳本,你將能夠查看你所有的「本地」C/C++調用。 – tricklepie
那麼,如何在'strace'中看到Python調用呢?我不只是想在那裏看到'PyEval_EvalFrameEx',我想看看真正的Python函數。 (另外,我問的不是關於'strace',而是關於MacOSX Instruments,但這不重要。) – Albert
有一個偉大的新的GUI分析器,稱爲PyVmMonitor。我還沒有成功地得到它附加到我正在運行的應用,但我一直在使用它來生成並分析來自這樣的命令行配置文件是:
python /Applications/PyVmMonitor.app/Contents/MacOS/public_api/pyvmmonitor --profile=yappi my_app.py
根據這一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的瞭解,我相信它應該可以工作。如果我確認這是真的,我會回覆。
你試過了嗎[RunSnakeRun](http://www.vrplumber.com/programming/runsnakerun/)?我個人從未使用過它,但它似乎是你正在尋找的東西。 – KronoS
@KronoS:我想我已經看到cProfile和出口商的KCacheGrind類似的解決方案。但是:(1)我也希望看到本地C代碼配置文件,即兩者結合。 (2)我也特別想。使用Xcode Instruments。 – Albert
也許我不完全明白你在問什麼,但也許你可以用'python -m cProfile myscript.py'運行你的腳本?然後,您可以將輸出保存到日誌文件 – ollien