Pergunta

Quando eu falho (por motivos eu entendo; esse não é o problema) Quando tento fazer algo que o cacau não esteja bem, como chamar um método que não existe ou tentando inserir nil em um conjunto, o O depurador mostra a pilha do main () para __ththread_kill, sem qualquer um dos quadros que estavam presentes quando o código de travamento real correu. Há um quadro (9 do principal) chamado objc_exception_rethrow. Isso me leva a acreditar que o Cacau Touch está tentando fazer algo ou outro para recuperar todas as exceções e morrer graciosamente ou algo assim. No entanto, é muito irritante ao depurar não ter a capacidade de realmente usar as ferramentas de depuração do Xcode4 para investigar os quadros de pilha de chamadas, ou até mesmo ver onde no meu código eu caí.

Existe alguma maneira de fazer o comportamento objc_exception_rethrow não acontecer, e apenas bater assim que uma exceção for levantada? Talvez haja um cenário de depuração que o torna acidentado anteriormente (no direito tempo)? (Eu não mexi com nenhuma das configurações de construção neste projeto ainda.)

Foi útil?

Solução 2

Eu encontrei a resposta: defina um ponto de interrupção em exceções obj-c.Ele irá para o depurador quando objc_exception_throw é atingido, o que é bom.Infelizmente, isso acontece antes que a exceção seja impressa, mas podemos fazer isso acontecer de qualquer maneira (na maioria das vezes) definindo a ação do ponto de interrupção para ser (ação de depurador) po *(id *)($ebp + 8).

Outras dicas

Não conheço nenhuma configuração XCode que possa desativar a descarga de exceções.Para o meu conhecimento, eles são re-lançados pelo tempo de execução.Você poderia tentar executar o aplicativo sem o depurador conectado e deixá-lo bater.O relatório de acidente deve conter uma seção "última exceção Backtrace", que lhe dará exatamente o que você precisa neste caso.

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