Pergunta

Eu estive testando o desempenho e perfil de memória AQTime para ver se vale a pena gastar os grandes $$$ para ele para a minha aplicação Delphi.

O que me espanta é como ele pode dar-lhe o desempenho de nível de linha fonte de rastreamento (que inclui o número de vezes que cada linha foi executado ea quantidade de tempo que a linha levou) sem modificar o código-fonte do aplicativo e sem a adição de uma quantidade excessiva de tempo para a depuração prazo.

A maneira que eles fazem isso de forma tão eficiente faz-me pensar que pode haver algumas técnicas / tecnologias usadas aqui que eu não sei sobre isso seria útil para conhecer.

Você sabe que tipo de métodos que eles usam para capturar a linha por linha de execução, sem alterações no código?

Existem outras ferramentas de perfil, que também fazer não-invasivo verificação de linha-a-linha e, nesse caso, eles usam as mesmas técnicas?

Foi útil?

Solução

Este é apenas especulação, mas talvez AQtime é baseado em uma tecnologia que é semelhante ao Microsoft Detours ?

Detours é uma biblioteca para instrumentar funções arbitrária Win32 em x86, x64, e IA64 máquinas. intercepta Detours funções Win32 por re-escrever o código na memória para funções-alvo.

Outras dicas

Eu fiz um profiler de código aberto para Delphi que faz a mesma: http://code.google.com/p/asmprofiler/

Não é perfeito, mas é livre :-). É também utiliza a técnica Detour. Ele armazena todas as chamadas (você deve conjunto de manuais que funciona você quiser perfil), para que ele possa fazer uma árvore de histórico de chamadas exata, incluindo um gráfico de tempo (!).

Eu não sei sobre Delphi em particular, mas um depurador aplicativo C pode fazer linha por linha de perfis com relativa facilidade - ele pode carregar o código e associar cada caminho de código com um bloco de código. Então, ele pode quebrar em todas as instruções de desvio condicional e apenas assistir e ver o caminho de código é tomada. Depuradores como gdb pode operar relativamente eficiente porque eles trabalham através do kernel e não modificar o código, eles apenas se informar quando cada linha é executada. Se alguma coisa faz com que o bloco a ser encerrado precocemente (longjmp), o depurador pode ligar isso e descobrir o quão longe ele ficou nos blocos quando isso aconteceu e incremento somente as linhas.

É claro que ainda seria difícil de código, mas quando digo facilmente quero dizer que você poderia fazê-lo sem perder quebra vez em cada instrução para atualizar um contador.

O longa desde extinta TurboPower também teve uma grande ferramenta de perfil / análise para Delphi chamado Sleuth QA Suite. Eu encontrei-o muito mais simples do AQTime, mas também muito mais fácil de obter resultado significativo. Pode valer a pena tentar rastrear -? EBay, talvez

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top