Aqui está mais uma solução, não tão elegante quanto a anterior, mas se você não adicionou pontos de interrupção ou manipuladores de exceção, pode ser apenas um caminho a percorrer.
Quando o aplicativo falha, e você obtém sua pilha bruta de primeira chamada (em números hexadecimais), digite no console do Xcode info line *hex
(não se esqueça do 0x
especificador de estrela e hexadecimal), por exemplo:
(gdb) info line *0x2658
Line 15 of "path/to/file/main.m" starts at address 0x25f2 <main+50>
and ends at 0x267e <main+190>.
Se você estiver usando lldb , poderá digitar image lookup -a hex
(sem estrela nesta situação) e obter uma saída semelhante.
Com esse método, você pode passar da parte superior da pilha de lançamento (haverá cerca de 5-7 propagadores de exceção do sistema) para a sua função que causou uma falha e determinar o arquivo e a linha de código exatos.
Além disso, para um efeito semelhante, você pode usar o utilitário atos no terminal, apenas digite:
atos -o path/to/AplicationBundle.app/Executable 0xAdress1 0xAdress2 0xAdress3 ...
e você obtém o rastreamento de pilha simbolizado (pelo menos para funções com símbolos de depuração). Esse método é mais preferível, porque você não tem para cada chamada de endereço info line
, apenas copie os endereços da saída do console e cole-os no terminal.