O que é um perfilador C ++ muito fácil (VC ++)?

Eu usei alguns profilers no passado e nunca os achei particularmente fáceis. Talvez eu tenha escolhido os ruins, talvez eu realmente não soubesse o que estava esperando! Mas eu gostaria de saber se existem criadores de perfis ‘padrão’ que simplesmente aparecem e trabalham? Eu não acredito que eu precise de relatórios maciçamente detalhados, apenas para captar grandes pontos negros. A facilidade de uso é mais importante para mim neste momento.

É o VC ++ 2008 que estamos usando (eu executo a edição padrão pessoalmente). Eu não suponho que haja alguma ferramenta no IDE para isso, eu não consigo ver nenhum dos menus principais?

VS embutido:

Se você tiver edição de equipe, você pode usar o criador de perfil do Visual Studio .


Outras opções:

Caso contrário, verifique esta discussão .


Criando seus próprios facilmente:

Eu pessoalmente uso um construído internamente com base no QueryPerformanceCounter API do Win32. Você pode fazer algo agradável e fácil de usar dentro de cem linhas de código ou menos.

O processo é simples: crie uma macro no topo de cada function que você deseja criar o perfil chamado PROFILE_FUNC () e que irá adicionar às statistics gerenciadas internamente. Em seguida, tem outra macro chamada PROFILE_DUMP (), que irá despejar as saídas para um documento de texto.

PROFILE_FUNC () cria um object que usará o RAII para registrar a quantidade de tempo até que o object seja destruído. O construtor deste object RAII e o destruidor chamarão QueryPerformanceCounter . Você também pode deixar essas linhas em seu código e controlar o comportamento por meio de um #define PROFILING_ON

Eu sugiro um método muito simples (que eu aprendi lendo as postagens de Mike Dunlavey no SO):

Apenas pause o programa.

Faça isso várias vezes para obter uma amostra razoável. Se uma function específica estiver demorando metade do tempo de execução do seu programa, as probabilidades são de que você a capture rapidamente.

Se você melhorar o desempenho dessa function em 50%, melhorará o tempo de execução geral em 25%. E se você descobrir que nem sequer é necessário (eu encontrei vários desses casos no curto período em que estive usando esse método), você acabou de reduzir o tempo de execução pela metade.

Devo confessar que no começo eu estava bastante cético em relação à eficácia dessa abordagem, mas depois de tentar por algumas semanas, estou viciado.

Eu sempre usei AMD CodeAnalyst, acho muito fácil de usar e dá resultados interessantes. Sempre usei o perfil baseado em tempo, no qual descobri que ele coopera bem com as informações de debugging dos meus aplicativos, permitindo que eu encontre onde o tempo é gasto no procedimento, instrução C ++ e nível de instrução de assembly única.

Eu usei lt prof no passado para uma rápida execução do meu aplicativo C ++. Funciona muito fácil e roda com um programa compilado, não precisa de ganchos ou ajustes de código fonte. Existe uma versão de avaliação disponível, acredito.

Uma forma muito simples (e gratuita) de criar um perfil é instalar os depuradores do Windows (cdb / windbg), definir um bp no local de interesse e emitir o comando wt (“Trace and Watch Data”). Confira o MSDN para mais informações.