So che posso profilare il mio codice con gprof
e kprof
su Linux. Esiste un'alternativa comparabile a queste applicazioni su Windows?Codice di profiling C su Windows quando si utilizza Eclipse
risposta
software commerciale:
- razionale Quantificare (costoso, lento, ma molto dettagliato)
- AQTime (meno costoso, meno lento, un po 'dettagliata)
Software libero:
- Molto assonnato (www.codersnotes.com)
- Luca StackWalker (lukestackwalker.sourceforge.net)
Queste alternative commerciali modificare il codice compilato da 'strumentazione' (istruzioni aggiungendo) ad esso ed eseguire la sincronizzazione withing le istruzioni aggiunte. Ciò significa che fanno rallentare seriamente la tua applicazione.
Queste alternative gratuite utilizzano il campionamento, ovvero sono meno dettagliate, ma molto veloci. In pratica ho scoperto che soprattutto Very Sleepy è molto buono per dare una rapida occhiata ai problemi di prestazioni nella tua applicazione.
Ho provato sia Very Sleepy che Luke StackWalker, ma non sono in grado di dirmi nulla. Non sembrano avere accesso al mio codice sorgente. gprof tuttavia funziona bene. Come mai? Mi piacciono molto i profiler basati su GUI, ma non funzionano. – Pieter
Questo errore è stato prodotto da Luca StackWalker: 'ERRORE: SymGetModuleInfo64, GetLastError: 1114 (Indirizzo: 7C90E514)' – Pieter
Ho aperto una domanda separata per questo problema qui: http://stackoverflow.com/questions/2302596/luke- stackwalker-returns-error-when-running-gprof-works-fine – Pieter
Sì, è possibile profilo codice with Visual Studio
Sono un utente Eclipse, quindi non è un'opzione per me. – Pieter
@Pieter: specificare questa importante clausola nella * domanda * –
In ogni caso, le edizioni standard ed Express di Visual Studio non includono un profiler. Con Pro, c'è un semplice profiler (da linea di comando) che credo sia un download separato e non è facile da usare. Ciò che Microsoft vuole è che le persone (ricche) comprino Team Suite. – Steve314
C'è una porta MinGW di gprof che funziona più o meno come la variante di Linux. È possibile ottenere un intero MinGW installation (penso che gprof sia incluso ma non sicuro) o ottenere gprof dallo MinGW binutils package.
Per Eclipse, c'è TPTP ma non supporta la profilatura C/C++ per quanto ne so.
Qual è il motivo della profilazione? Vuoi a) misurare i tempi e ottenere un grafico delle chiamate, oppure b) trovare le cose da modificare per rendere il codice più veloce? (Questi non sono gli stessi.)
Se (b) è possibile utilizzare this trick, utilizzando il pulsante Pausa in Eclipse.
Aggiunto: Forse sarebbe utile a trasmettere una certa esperienza di ciò che i problemi di prestazioni sono in realtà piace, e dove ci si può aspettare di trovare loro. Ecco alcuni esempi semplici:
Un inserzione (ordine n^2) dove gli articoli che sono stati scelti sono stringhe, e sono confrontati da una funzione di stringa-confrontare. Dov'è il punto caldo? in stringa-confronta. Dov'è il problema? Nell'ordine in cui viene chiamato il confronto delle stringhe. Se n = 10 non è un problema, ma se n = 1000, all'improvviso ci vuole molto tempo. Il punto in cui viene chiamato string-compare è "cold", ma è qui che si trova il problema. Un piccolo numero di campioni dello stack di chiamata lo individuano con certezza.
Un'app che carica i plug-in richiede molto tempo per l'avvio. Un profiler dice che praticamente tutto in esso è "freddo". Qualcosa che misura il tempo di I/O dice che è quasi tutto il tempo di I/O, che sembra come ci si potrebbe aspettare, quindi potrebbe sembrare senza speranza.Tuttavia, i campioni di stack mostrano una grande percentuale di tempo trascorso con lo stack di circa 20 livelli nel processo di lettura della parte di risorse delle DLL di plugin allo scopo di convertire le costanti di stringa nella lingua locale. Indagando ulteriormente, si scopre che la maggior parte delle stringhe in fase di traduzione non sono il tipo che in realtà ha bisogno della traduzione. Sono stati messi in "caso" potrebbero aver bisogno di una traduzione e non sono mai stati pensati come qualcosa che potrebbe causare un problema di prestazioni. Risolvendo questo problema si ottengono notevoli risparmi di tempo.
Quindi è comune a pensare in termini di "punti caldi" e "colli di bottiglia", ma la maggior parte dei programmi, soprattutto quelli più grandi, tendono ad avere problemi di prestazioni in forma di chiamate di funzione che richiede un lavoro che non lo fa davvero bisogno di essere fatto. Fortunatamente si visualizzano sullo stack delle chiamate durante il tempo che stanno spendendo.
Sono interessato alla creazione di profili per vedere quali parti del mio codice impiegano più tempo a essere eseguite in modo da poter scoprire eventuali inefficienze. – Pieter
@Pieter: trovare le inefficienze è (b). Sto cercando di spargere la voce su questo. Ecco un altro esempio: http://stackoverflow.com/questions/2308026/which-has-been-the-most-reliable-fastest-windows-c-profiler-that-you-have-used/2311117#2311117 –
Sembra complicato per un principiante C come me. La mia applicazione di profilazione ideale dovrebbe essere in grado di posare una mappa di calore sul mio codice per vedere quali comandi impiegano più tempo per l'esecuzione. Qualche codice dovrebbe impiegare più tempo di elaborazione, lo so, ma ci sono molti casi in cui questo potrebbe aiutare a rilevare le inefficienze di cui sopra. – Pieter
- 1. EntryPointNotFoundException quando si utilizza TaskDialog in C#
- 2. Il codice C# funziona solo quando si utilizza il debugger?
- 3. Profiling Applicazioni C++ multithreading
- 4. TypeInitializationException quando si utilizza swig per C#
- 5. Android: errore CSS quando si utilizza l'unità HTML ed Eclipse
- 6. Profiling C++ con Xcode
- 7. Tomcat 7 sovrascrive tomcat-users.xml quando si utilizza Eclipse
- 8. "codice di errore 5: database bloccato" quando si utilizza ContentProvider
- 9. Quando si utilizza ANTLR
- 10. Errore su LoaderManager quando si utilizza la libreria di supporto
- 11. Come riattaccare subclipse quando si utilizza un nuovo Eclipse su un'area di lavoro esistente
- 12. Nascondi quando si utilizza Exec()
- 13. Quando si parla di codice C#, come si pronuncia "T?"
- 14. Profiling x86 eseguibile con Dependency Walker si blocca su Windows 7 x64
- 15. Quando si utilizza CFRelease?
- 16. Come si imposta __name__ su "__main__" quando si utilizza IronPython?
- 17. Attenzione quando si utilizza Reachability.h
- 18. Errore di segmentazione quando si utilizza regexec/strtok_r in C
- 19. quando si utilizza knitr
- 20. Quando e perché si utilizza @interface ClassName (Private)? - Objective-C
- 21. Ottenere informazioni su Active Directory quando si utilizza l'autenticazione di Windows?
- 22. riordino di geom_bar quando si utilizza facet_wrap
- 23. DirectoryServicesCOMException quando si utilizza System.DirectoryServices.AccountManagement
- 24. C# vs sintassi VB quando si utilizza HttpWebRequest.Create
- 25. Quando si utilizza Mercurial HG, come ottenere l'ultimo codice?
- 26. Consenti null nel modello quando si utilizza codice prima
- 27. Come scrivere codice personalizzato (logica) quando si utilizza firebase
- 28. Quando si utilizza Collections.sort(), ordina e stampa il codice hash
- 29. Errore quando si utilizza un indice di testo su Mongodb
- 30. Come si modifica il percorso di test predefinito in Eclipse quando si utilizza Maven?
Quale compilatore stai usando su Windows? –
È possibile utilizzare gprof su Windows con la porta MinGW del compilatore GCC. –