Cos’è un profiler C ++ molto semplice (VC ++)?

Ho usato alcuni profiler in passato e non li ho mai trovati particolarmente facili. Forse ho scelto quelli cattivi, forse non sapevo davvero cosa mi aspettassi! Ma mi piacerebbe sapere se ci sono degli profiler ‘standard’ che semplicemente entrano e funzionano? Non credo di aver bisogno di resoconti dettagliati, ma solo per raccogliere i principali punti neri. La facilità d’uso è più importante per me a questo punto.

È VC ++ 2008 che usiamo (eseguo personalmente la versione standard). Suppongo che non ci siano strumenti nell’IDE per questo, non riesco a vederne nessuno guardando i menu principali?

VS integrato:

Se hai un’edizione di gruppo puoi utilizzare il profiler di Visual Studio .


Altre opzioni:

Altrimenti controlla questo thread .


Crea il tuo facilmente:

Io personalmente uso uno costruito internamente basato sull’API Win32 QueryPerformanceCounter . Puoi creare qualcosa di carino e facile da usare in un centinaio di righe di codice o meno.

Il processo è semplice: crea una macro nella parte superiore di ogni funzione che desideri profilare, denominata PROFILE_FUNC () e che verrà aggiunta alle statistiche gestite internamente. Quindi disporre di un’altra macro denominata PROFILE_DUMP () che eseguirà il dump delle uscite su un documento di testo.

PROFILE_FUNC () crea un object che utilizzerà RAII per registrare la quantità di tempo fino alla distruzione dell’object. Sia il costruttore di questo object RAII che il distruttore chiameranno QueryPerformanceCounter . Puoi anche lasciare queste righe nel tuo codice e controllare il comportamento tramite un #define PROFILING_ON

Suggerisco un metodo molto semplice (che ho imparato leggendo i post di Mike Dunlavey su SO):

Basta mettere in pausa il programma.

Fatelo più volte per ottenere un campione ragionevole. Se una particolare funzione sta prendendo la metà del tempo di esecuzione del tuo programma, le probabilità sono che lo prenderai molto rapidamente.

Se migliori le prestazioni di quella funzione del 50%, hai solo migliorato il tempo di esecuzione complessivo del 25%. E se scopri che non è nemmeno affatto necessario (ho trovato molti casi simili nel breve periodo in cui ho utilizzato questo metodo), hai ridotto a metà il tempo di esecuzione.

Devo confessare che all’inizio ero piuttosto scettico sull’efficacia di questo approccio, ma dopo averlo provato per un paio di settimane, sono rimasto affascinato.

Ho sempre usato AMD CodeAnalyst, lo trovo abbastanza facile da usare e dà risultati interessanti. Ho sempre utilizzato il profilo basato sul tempo, in cui ho trovato che funziona bene con le informazioni di debug delle mie app, permettendomi di trovare il tempo impiegato per la procedura, l’istruzione C ++ e il livello di istruzioni di assemblaggio singolo.

Ho usato lt prof in passato per una rapida esecuzione della mia app C ++. Funziona in modo semplice e funziona con un programma compilato, non ha bisogno e ganci o modifiche del codice sorgente. C’è una versione di prova disponibile, credo.

Un modo molto semplice (e gratuito) per il profilo è installare i debugger di Windows (cdb / windbg), impostare un bp sul luogo di interesse ed emettere il comando wt (“Trace and Watch Data”). Controlla MSDN per maggiori informazioni.