A história de um hacker
A data é 12/02/10. Os dias que antecederam o Natal estão acabando e eu praticamente atingi um grande obstáculo como programador de janelas. Estou usando o AQTime, tentei sonolento, brilhante e com muito sono e, enquanto falamos, o VTune está sendo instalado. Eu tentei usar o VS2008 profiler, e ele tem sido positivamente punitivo e muitas vezes insensível. Eu usei a técnica de pausa aleatória. Examinei as árvores de chamada. Eu disparei vestígios de funções. Mas o triste e doloroso fato da questão é que o aplicativo com o qual estou trabalhando tem mais de um milhão de linhas de código, provavelmente com mais um milhão de linhas de aplicativos de terceiros.
Eu preciso de ferramentas melhores. Eu li os outros tópicos. Eu tentei cada perfil listado em cada tópico. Simplesmente tem que haver algo melhor do que essas opções caras e caras, ou quantidades absurdas de trabalho para quase nenhum ganho. Para complicar ainda mais, nosso código é muito encadeado e executa vários loops de eventos Qt, alguns dos quais são tão frágeis que travam sob instrumentação pesada devido a atrasos de tempo. Não me pergunte por que estamos executando vários loops de eventos. Ninguém pode me dizer.
Existem opções mais semelhantes às do Valgrind em um ambiente Windows?
Existe algo melhor do que a longa faixa de ferramentas quebradas que eu já tentei?
Existe algo projetado para integrar com o Qt, talvez com uma exibição útil de eventos na fila?
Uma lista completa das ferramentas que tentei, com as que foram realmente úteis em itálico:
- AQTime: Bastante bom! Tem algum problema com recursão profunda, mas o gráfico de chamadas está correto nesses casos e pode ser usado para esclarecer qualquer confusão que você possa ter. Não é uma ferramenta perfeita, mas vale a pena experimentar. Pode atender às suas necessidades, e certamente foi bom o suficiente para mim a maior parte do tempo.
- Ataque aleatório ataque no modo de depuração: Não há informações suficientes o suficiente.
Uma boa ferramenta, mas não uma solução completa. - Parallel Studios: a opção nuclear. Obtrusivo, estranho e loucamente poderoso. Acho que você deve acessar a avaliação de 30 dias e descobrir se é uma boa opção. É muito legal também.
- AMD Codeanalyst: Maravilhoso, fácil de usar, muito propenso a falhas, mas acho que isso é uma coisa do ambiente. Eu recomendo tentar, pois é grátis.
- Luke Stackwalker: Funciona bem em pequenos projetos, está um pouco tentando fazê-lo funcionar no nosso. Alguns bons resultados, porém, e definitivamente substituem Sleepy por minhas tarefas pessoais.
- PurifyPlus: Não há suporte para ambientes Win-x64, principalmente o Windows 7. Caso contrário, excelente. Vários colegas de outros departamentos juram isso.
- Profiler VS2008: Produz saída na faixa de mais de 100 shows no modo de rastreamento de função na resolução necessária. No lado positivo, produz resultados sólidos.
- GProf: Requer que o GCC seja moderadamente eficaz.
- VTune: o W7 do VTune suporta fronteiras criminais. Caso contrário, excelente
- PIN: eu precisaria hackear minha própria ferramenta, então esse é o último recurso.
- Sonolento \ Muito sonolento: Útil para aplicativos menores, mas falhando comigo aqui.
- EasyProfiler: Nada mal se você não se importar com um pouco de código injetado manualmente para indicar onde instrumentar.
- Valgrind: * nix apenas, mas muito bom quando você está nesse ambiente.
- OProfile: apenas Linux.
- Proffy: Eles atiram em cavalos selvagens.
Ferramentas sugeridas que eu não tentei:
- XPerf:
- Glowcode:
- Devpartner:
Notas: Ambiente Intel no momento. VS2008, impulsiona bibliotecas. Qt 4+. E o desgraçado de todos eles: integração Qt / MFC via trolltech.
Agora: quase duas semanas depois, parece que meu problema foi resolvido. Graças a uma variedade de ferramentas, incluindo quase tudo na lista e alguns dos meus truques pessoais, encontramos os principais gargalos. No entanto, vou continuar testando, explorando e testando novos criadores de perfil, além de novas tecnologias. Por quê? Porque devo isso a vocês, porque vocês são demais. Isso diminui um pouco a linha do tempo, mas ainda estou muito animado para continuar testando novas ferramentas.
Sinopse
Entre muitos outros problemas, vários componentes foram recentemente trocados para o modelo de encadeamento incorreto, causando sérios problemas devido ao fato de que o código abaixo de nós de repente não era mais multithread. Não posso dizer mais nada porque viola meu NDA, mas posso dizer que isso nunca foi encontrado por inspeção casual ou mesmo pela revisão normal do código. Sem perfis, caligráficos e pausas aleatórias em conjunto, ainda estaríamos gritando nossa fúria no belo arco azul do céu. Felizmente, trabalho com alguns dos melhores hackers que já conheci e tenho acesso a um incrível verso cheio de ótimas ferramentas e ótimas pessoas.
Gentlefolk, eu aprecio isso tremendamente, e só lamento não ter representantes suficientes para recompensar cada um de vocês com uma recompensa. Ainda acho que essa é uma pergunta importante para obter uma resposta melhor do que as que temos até agora no SO.
Como resultado, a cada semana, durante as próximas três semanas, estarei oferecendo a maior recompensa que posso pagar e concedendo a resposta com a melhor ferramenta que acho que não é de conhecimento comum. Depois de três semanas, esperamos ter acumulado um perfil definitivo dos criadores de perfil, se você perdoar minha punição.
Take-away
Use um perfilador. Eles são bons o suficiente para Ritchie, Kernighan, Bentley e Knuth. Eu não ligo para quem você pensa que é. Use um criador de perfil. Se o que você tem não funcionar, encontre outro. Se você não encontrar um, codifique um. Se você não pode codificar um, ou é um desligamento pequeno, ou está apenas preso, use uma pausa aleatória. Se tudo mais falhar, contrate alguns alunos de pós-graduação para fazer um perfil.
Uma visão mais longa
Então, achei que seria legal escrever um pouco de uma retrospectiva. Optei por trabalhar extensivamente com o Parallel Studios, em parte porque ele é realmente construído sobre a Ferramenta PIN. Tendo mantido relações acadêmicas com alguns dos pesquisadores envolvidos, senti que isso provavelmente era uma marca de alguma qualidade. Felizmente, eu estava certa. Embora a GUI seja um pouco terrível, achei o IPS incrivelmente útil, embora não possa recomendá-lo confortavelmente a todos. Criticamente, não há uma maneira óbvia de obter contagens de hits no nível da linha, algo que o AQT e vários outros criadores de perfil fornecem, e eu achei muito útil para examinar a taxa de seleção de ramificações, entre outras coisas. Na net, eu também gostei de usar o AQTime, e achei o suporte deles bastante responsivo. Novamente, tenho que qualificar minha recomendação: Muitos de seus recursos não funcionam tão bem, e alguns deles são propensos a falhas no Win7x64. O XPerf também teve um desempenho admirável, mas é extremamente lento para os detalhes de amostragem necessários para obter boas leituras em certos tipos de aplicativos.
No momento, devo dizer que não acho que exista uma opção definitiva para a criação de perfil de código C ++ em um ambiente W7x64, mas certamente existem opções que simplesmente não conseguem executar nenhum serviço útil.