Como "definir um ponto de interrupção no malloc_error_break para depurar"


126

Estou recebendo muitas saídas do console como esta sem o meu aplicativo travar:

malloc: * erro para o objeto 0xc6a3970: o ponteiro sendo liberado não foi alocado * defina um ponto de interrupção no malloc_error_break para depurar

Como posso descobrir qual objeto ou variável é afetada?

Tentei definir um ponto de interrupção simbólico como este, mas nunca pára:

insira a descrição da imagem aqui


1
Eu resolvo esse problema desativando o safari inspecionar. stackoverflow.com/a/43885754/6521116
Kris Roofe

Uma das causas disso é uma função / método que deve retornar um objeto, que chega ao final da função e não retorna nada.
Xofo 10/10

Respostas:


136

Defina um ponto de interrupção em malloc_error_break () abrindo o Navegador de ponto de interrupção (Exibir-> Navegadores-> Mostrar navegador de ponto de interrupção ou ⌘7), clicando no botão de adição no canto inferior esquerdo e selecionando "Adicionar ponto de interrupção simbólico". Na janela pop-up exibida, digite malloc_error_breako campo Símbolo e clique em Concluído.

EDIT: O openfrog adicionou uma captura de tela e indicou que ele já tentou essas etapas sem êxito depois que eu postei minha resposta. Com essa edição, não tenho certeza do que dizer. Eu nunca vi isso falhar e, de fato, sempre mantenho um ponto de interrupção no conjunto malloc_error_break.


2
Isso funcionou para mim (sem o módulo). A causa do problema para mim foi que eu tinha um UIImagebackup de um arquivo e estava substituindo o arquivo por uma imagem diferente. Isso causou um erro quando liguei UIImagePNGRepresentationna imagem original (não quando o arquivo foi realmente substituído).
Robert

Não estou recebendo um botão de adição no canto inferior esquerdo da ⌘7barra ... Talvez você quis dizer ⌘8?
ScottyBlades

@ScottyBlades adivinhando que o atalho mudou. Eu escrevi esta resposta há 8 anos e 7 versões principais do Xcode ...
Andrew Madsen

@AndrewMadsen Não se preocupe, basta verificar se faz sentido editar.
ScottyBlades

46

Na sua captura de tela, você não especificou nenhum módulo: tente definir "libsystem_c.dylib"

insira a descrição da imagem aqui

Eu fiz isso e funciona: o ponto de interrupção para aqui (embora o stacktrace geralmente suba de alguma lib obscura do sistema ...)


7
Parece que o nome do módulo é diferente em iOS, é: libsystem_malloc.dylib. O ponto de interrupção funciona para mim sem especificar um módulo.
Nestor

6

Eu tive o mesmo problema com o Xcode. Eu segui os passos que você deu e não funcionou. Fiquei louco porque em todos os fóruns que vi, todas as pistas para esse problema são as que você deu. Finalmente vi que coloquei um espaço após o malloc_error_break, suprimi-o e agora funciona. Um problema idiota, mas se a solução não funcionar, verifique se você não colocou espaço antes e depois do malloc_error_break.

Espero que esta mensagem ajude ..


4

Eu tinha dado permissões, não deveria ter que escrever em algumas pastas (especialmente / usr / bin /), e isso causou o problema. Corrigi-o abrindo o Utilitário de Disco e executando 'Reparar Permissões de Disco' no disco HD do Macintosh.


Obrigado, isso consertou minha máquina com borked.
Matt Fletcher

2

Eu resolvo isso pelo inspetor de safári próximo. Consulte o meu post . Às vezes, também encontrava som quando executo meu aplicativo para teste e, em seguida, abro o safari com o auto inspector.

insira a descrição da imagem aqui

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.