2015-06-29 18 views
9

Kcachegrind funge da meravigliosa utilità per rappresentare visivamente l'hotspot sul livello di linea di origine durante il profiling del codice. L'ho trovato abbastanza utile quando ottimizzavo la mia base di codice C++. Per il mio ultimo progetto python ho iniziato a utilizzare Kcachegrind per elaborare l'output da profilestats. Kcachegrind è una utility solo per Linux ma sono disponibili varie porte non ufficiali e una che sto utilizzando è qcachegrind. Generalmente funziona in larga misura e è sufficiente per la maggior parte dei problemi, tranne per il fatto che sto facendo fatica a far funzionare l'annotazione di origine.Come eseguire l'annotazione di python quando si utilizza qcachegrind per elaborare l'output di profilestats

Nella scheda Origine mi viene salutato con la fonte a conoscenza mancante messaggio

There is no source available for the following function: 
    'main C:\Projects\module\src\source.py:397' 
This is because no debug information is present 
Recompile source and redo the profile run. 
The function is located in the ELF Object: 
    '(unknown)' 

Utilizzando l'opzione

Settings -> Configure -> Source Annotation 

e aggiungendo la directory base di origine non era utile.

Ho la sensazione che l'utilità voglia un oggetto ELF che non è rilevante per Python. Qualsiasi aiuto in questo senso sarebbe utile.

informazioni rilevanti:

  • Python 2.7
  • profilestats (2,0)
  • QCachegrind 0.7.4
  • di Windows 2012R2
+0

Sembra come 'profilestats' non possono essere compresi i dati rilevanti nella sua produzione. Hai provato a salvare l'output di profilazione nel "formato Python" e convertirlo usando ['pyprof2calltree'] (https://pypi.python.org/pypi/pyprof2calltree/)? – taleinat

risposta

1

I secondi @taleniat commento. Sono un utente OSX. Ho avuto qualche problema nel far funzionare qcachegrind, quindi ho finito con pyprof2calltree e funziona perfettamente, inclusa la scheda del codice sorgente. YMMV.

Prima eseguire lo script con Cprofile

python -m cProfile -o report.profile report.py

Quindi è possibile utilizzare pyprof2calltree per lanciare qcachegrind (senza bisogno di conversione intermedio).

pyprof2calltree -k -i report.profile

tra l'altro, Python 2.7.10 e 0.7.4 qcachegrind installato tramite homebrew su OSX 10.11