Profiling programas escritos em C ou C ++
Pergunta
O que você sugere a melhor ferramenta ao perfil código C / C ++ e determinar quais partes estão tomando a maior parte do tempo. Atualmente, estou apenas contando com os registros, mas é claro que a informação não é precisa, desde atrasos desnecessários são introduzidos.
De preferência, a ferramenta também seria capaz de detectar / sugerir áreas que poderiam ser otimizados, se as houver ferramenta.
Plataforma: Linux
O pedido deve ser usado em um ambiente incorporado por isso deve ser leve e externo (não um plugin em algum IDE).
Solução
Eu posso recomendar vivamente callgrind
em combinação com KCachegrind .
Outras dicas
"gprof" em Linux / FreeBSD é uma ferramenta muito simples e eficiente para identificar quais rotinas estão monopolizando a CPU durante a execução. Dá tanto perfil aninhado e plana de funções. Ele lhe dá a percentagem de tempo de CPU tomada por cada função executada durante o tempo de execução do profiler, e também o percentual tomadas dentro da própria função, eo percentual tomadas por suas funções criança. Isso ajuda você facilmente segregar as funções ofensivas.
Eu fiz boas experiências usando o profiler do Microsoft Visual C ++, existem outros programas externos, como Intels VTune , também, mas a maioria deles não são livres.
Depende da plataforma. Se você estiver usando MSVC, algumas versões dele tem um profiler integrado. AMD e Intel ambos têm perfis disponíveis, bem como (CodeAnalyst e VTune).
No Linux, o único que eu usei é gprof, mas eu sei que há outros (e eu acho que os da AMD ou da Intel pode estar disponível em versões do Linux também)
E, claro, todo o conjunto Valgrind pode ser útil também. Algumas ferramentas como callgrind ou cachegrind pode dar-lhe um monte de informações sobre o desempenho.
Existem muitas ferramentas bom perfil para isso como quantificar ou KCachegrind. O único problema com essas ferramentas é que eles diminuir o desempenho tempo de execução assim por diante algumas grandes sistemas que podem não escalam bem o suficiente.
Às vezes é suficiente apenas para executar no depurador e pressionar ctrl-c, olhar para o rastreamento de pilha e repita este talvez 4 vezes.
Se você está sempre na mesma parte do código depois de ter encontrado onde você está gastando a maior parte do tempo.
Você quer claramente duas coisas:
-
Para o perfil de seu código e medi-lo.
-
Para detectar áreas que poderiam ser otimizados.
Estes são problemas diferentes. Eles não são os mesmos, apesar do que você pode ter sido dito.
Para o problema será sugerido (1) muitas profilers boas.
Para o problema (2) profilers ajudar apenas indiretamente.
Há uma técnica muito mais simples e geralmente mais eficaz.
Se você estiver no Windows, sugiro AQTime . Suporta quase todos os compilador lá fora, incluindo .NET, Delphi e VB (e todos os compiladores C ++, é claro (;..) E é apenas o melhor ferramenta de perfil que eu já tentei E não é só um profiler desempenho
Para medições de desempenho oprofile é uma boa escolha como existe um plugin amigável para eclipse no Ferramentas Linux Projeto .