ferramentas de detecção de vazamento de memória
-
02-07-2019 - |
Pergunta
ambiente de desenvolvimento Xcode da A Apple fornece todas as ferramentas para a detecção de vazamento de memória?
Estou especialmente interessado em ferramentas que se aplicam ao iPhone SDK. Atualmente minha plataforma favorita para projetos de programação passatempo
Documentações / tutoriais para a referida ferramentas seria muito útil.
Solução
Há um especificamente chamado Leaks
e como um cartaz anterior disse, a maneira mais fácil de executá-lo é em linha reta do Xcode:
Executar -> Iniciar com a ferramenta Performance -> Vazamentos
Parece muito bons em detectar vazamentos de memória, e era fácil para um chefe não-C como eu descobrir.
Outras dicas
Selecionar Profile
a partir do menu Product
no Xcode 6 para lançar ferramenta Instrumentos da Apple. (O aplicativo está localizado dentro conteúdo do pacote do aplicativo Xcode: /Applications/Xcode.app/Contents/Applications/
)
Uma alternativa comercial é OmniObjectMeter . (Descontinuado por o Grupo Omni)
O Clang Static Analyser
é grande para encontrar erros em C, C ++ e código de Objective-C:
Aqui está o link para a utilização de instrumento de Xcode para detectar vazamento de memória / desempenho de vocês ios application / mac Passos para executar instrumento de Xcode
Você pode executar as ferramentas dentro de Xcode sobre menu -> run -> start with performance tool -> ...
ambiente de desenvolvimento Xcode da A Apple fornece todas as ferramentas para a detecção de vazamento de memória?
Estou especialmente interessado em ferramentas que se aplicam ao iPhone SDK.
Sim. Apple chama-los "Instruments" (há mais do que apenas ferramentas de memória).
Veja da Apple Introduction to Instruments User Guide
. Em particular, veja Locating Memory Issues in Your App
. Ele fornece exemplos de como usar os modelos traço orientada a memória.
ObjectAlloc e MallocDebug deve ser tanto de ajuda para você. Se você instalou todo o SDK, eles vão ser encontrados em Developer-> Aplicações-> Ferramentas de desempenho.
Seus nomes dará uma boa pista bonita quanto às suas funções, OA, rastreia os objetos criar e MA é uma ferramenta geral de vazamento de memória.
Eu não tentei-los com o desenvolvimento do iPhone ainda, mas eu tenho que acreditar que eles iriam trabalhar lá também.
Assumindo que você se cadastrou no site do desenvolvedor iPhone ADC, aqui o link a seguir: Instruments User Guide
Ao usar rustyshelf's solution
certifique-se de testar no iPhone e não no simulador. uso de memória é dramaticamente diferente.
Feito um resumem das principais ferramentas de vazamento de memória: iphone-essential-performance-tools-list
Tente este também, um tutorial simples de começar com insturments Xcode
ferramenta de vazamento de memória: http://www.raywenderlich.com/2696/
Basic: http://www.raywenderlich.com/ 23037 /-how-to-instrumentos de uso-in Xcode
Passo 1. Escolha o instrumento alocações
- Escolha o modelo de perfil para alocações:
- Na interface principal Instruments, clique em VM Tracker, se presente, e pressione a tecla Delete desde que você não vai precisar esse instrumento em particular:
Ao clicar no botão de adição no canto superior direito, você pode adicionar mais instrumentos para diferentes tipos de testes, mas eu não vou estar cobrindo-os neste tutorial.
Passo 2. Defina suas configurações de Instrumentos
Antes de executar qualquer análise, existem algumas coisas que você precisa fazer. Primeiro, você precisa se conectar em um dispositivo iOS que tem seu aplicativo instalado. Deve ser um dispositivo físico porque o iOS Simulator ainda é um simulador e podem não representar fielmente o uso de memória em seu aplicativo ou como um aplicativo pode trabalhar sob pressão de memória.
Para escolher o seu destino, clique em Meu computador perto do topo, pairar sobre o seu dispositivo, e em seguida, escolher a sua aplicação a partir do submenu:
A seguir, há um painel onde você pode alterar as configurações para os tipos de alocações você estará vendo. Além de ter certeza que o Criado & persistente bolha estiver marcada, não há muito que você precisa fazer de antemão.
Passo 3. Pressione registro para executar o instrumento
Uma vez que você pressionar o botão de gravação no canto superior esquerdo, seu aplicativo será iniciado no seu dispositivo, e Instruments começará a traçar suas alocações. Tudo que você precisa fazer aqui é executado através de sua aplicação, com foco em possíveis áreas problemáticas para ver se mais aloca memória do que Desaloca. Isto poderia significar fazer um monte de tarefas repetitivas, mas você vai agradecer-te mais tarde.
Você deve ver algo como isto:
Eu recomendo que atravessa seu aplicativo uma vez e chegar a um ponto estável na memória para que você tenha uma boa base que fará com que qualquer aumento perceptível. Quando estiver satisfeito que você tem dados suficientes para teste, pressione o botão de parada no canto superior esquerdo.
Passo 4. Analisar
- A primeira coisa que faço é definir minha faixa de inspeção para medir os bytes persistentes totais na minha linha de base. Esse número de bytes persistentes está localizado logo abaixo do resumo de alocação.
Para realmente definir o intervalo de inspeção, use o atalho de teclado Comando < para a faixa de inspeção esquerda e Comando> para a faixa de inspeção direita. Em nossa aplicação, temos uma linha de base de cerca de 20MB.
- Então, eu mover minha faixa de inspeção direito a um ponto onde eu tinha corrido através do aplicativonovamente e voltou para a nossa raiz. Aqui, você pode ver a memória é aproximadamente o mesmo. Então, ao fazer isso mais algumas vezes e vendo sua memória voltar para a nossa linha de base, você pode supor não há grandes problemas de memória.
Existem diferentes maneiras de analisar esses dados que não vou abordar aqui, mas estar ciente de que há um menu completo drop-down de maneiras de ver e analisar seus dados.
Passo 5. Marcação gerações
Se você prefere não lidar com os intervalos de inspeção tanto, existe um recurso chamado Mark Generation. Há um botão para ele no painel direito de instrumentos.
Este botão vai marcar pontos na linha do tempo de instrumentos com base em onde a linha de inspeção é. Ele faz isso, a fim de manter o controle de todas as alocações vez que a marca anterior, ou desde o início, se não houver outras marcas. Você pode marcar gerações como você está executando o instrumento alocações ou após ter terminado a corrida, como neste exemplo:
Passo 6. Confira o rastreamento de pilha
A última coisa a tampa está olhando para o rastreamento de pilha. Para isso, pretende definir a sua gama de inspeção para destacar todas as alocações, e depois olhar para as estatísticas de visualização, certificando-se o Criado & persistente bolha é selecionado no painel da direita. Nas estatísticas Ver, certifique-Bytes persistentes é classificada maior para o menor. Há uma série de atribuições aqui, e pode ser difícil de entender o que está acontecendo, já que muitos deles são alocações do sistema.
Going Deep
- Olhe para as maiores dotações e clique na seta voltada para a direita. Muitas vezes, haverá atribuições dentro aqueles que você clicou e muitos deles não têm significado para você.
- Como você realçar diferentes alocações após clicar em uma seta, continue olhando para o detalhe estendida no painel da direita. Eventualmente, você vai se deparar com algum texto corajoso que leva ao código real em seu projeto, dizendo-lhe que o problema pode ser.
- Se fizer duplo-clique em um dos itens em negrito no rastreamento de pilha, ele vai levá-lo para o código real (supondo que você correu alocações em um aplicativo você possui).
-
Há um monte de coisas úteis sobre este ponto de vista, sendo um deles as tags em sua maioria amarelas sobre o direito mostrando-lhe o quanto de memória cada chamada de método está ocupando. Cada aplicativo é diferente para que você, o desenvolvedor, tem que decidir se o método destacado é um problema, algo que você pode otimizar, ou apenas um uparte navoidable do seu aplicativo.
-
No meu caso, que UIColor variável é algo que é persistente e utilizados em todo o nosso app e é, portanto, aceitável ao longo da vida de nosso aplicativo.