Como anexar o depurador ao aplicativo iOS após o lançamento?

100

Eu tenho um problema que estou solucionando, que ocorre muito raramente e não parece acontecer quando tenho coisas em execução no Xcode.

É possível executar um aplicativo normalmente (ou seja, do Springboard) até que meu problema ocorra e, em seguida, anexar um depurador nesse ponto?

Eu preferiria fazer isso sem jailbreak, se possível.

Locksleyu
fonte

Respostas:

123
  • Anexe o seu dispositivo conectado ao seu Mac
  • Depurar> Anexar ao Processo por PID ou Nome
  • Na folha de diálogo, insira o nome de seu aplicativo conforme aparece no navegador de depuração quando iniciado via Xcode.

Se o aplicativo já estiver em execução, o depurador se conectará ao processo em execução. Se não estiver em execução, ele aguardará o aplicativo iniciar e, em seguida, anexar.

Ole Begemann
fonte
Ole, obrigado pela resposta. Eu estava procurando uma maneira de fazer isso. Quando vou anexar o depurador, parece que está anexado, mas recebo esta mensagem: aviso: Não é possível ler os símbolos para / var / mobile / Applications / {GUID} / {APPNAME} .app / {APPNAME} (arquivo não encontrado). Quando pressiono o botão "parar" no XCode, o aplicativo é encerrado. Parece que ele não está encontrando os símbolos de depuração, embora esteja sendo construído no modo de depuração. Alguma ideia?
Brian
4
Tenho um problema com o Se não estiver em execução, ele esperará que o aplicativo seja iniciado e depois anexado. parte. Não funciona. Eu uso o nome do processo para esperar o aplicativo chamar. Eu inicio o aplicativo no iPhone, mas o depurador nunca percebe que o aplicativo foi iniciado.
Jonny
1
@BrianV - você precisa ter certeza de que está compilando com -ggdb se quiser poder anexar ao processo.
itfische
4
Eu concordo com Jonny; minha experiência é que a conexão funciona no simulador, mas não se conecta ao dispositivo real.
James Moore
4
NOTA: No Xcode 5.0.1+ é Debug > Attach to Process > By Process Identifier (PID) or Name stackoverflow.com/a/20193088/175830
Jason Axelson
116

Vou deixar isso aqui, pois nenhuma das outras 2 respostas me deu detalhes suficientes sem um pouco de dificuldade.

  1. Execute seu aplicativo no simulador e anote o nome no navegador de depuração insira a descrição da imagem aqui

  2. Conecte seu dispositivo e não se esqueça de selecioná-lo como destino insira a descrição da imagem aqui

  3. Depurar> Anexar ao Processo> Por Identificador de Processo (PID) ou Nome insira a descrição da imagem aqui
  4. Insira o nome da etapa 1 e anexe. Isso deve ser tudo que você precisa fazer. insira a descrição da imagem aqui
Adam Johns
fonte
8
Você deve ter 1000 votos positivos. Depurar coisas que começam por meio de um esquema de url personalizado pode ser um saco sem esse truque bacana. Muito Obrigado!
txulu
2
Eu gostaria de ter visto essa resposta antes de passar 20 minutos
tentando
7
Isso funciona porque se conecta ao processo, mas não consigo ver nenhuma saída de log, que é o que realmente preciso. Alguma ideia?
Orlando
2
@Orlando - Se você está procurando uma saída de log, recomendo o DeviceConsole: github.com/rpetrich/deviceconsole
orion elenzil
1
Eu fiz exatamente o que você sugeriu. e recebo o erro: Could not attach to PIDtentei o nome e o ID. Eu tentei enquanto o aplicativo está rodando e enquanto ele está parado ..
Querida,
49

No Xcode 5.0.1 e 6 são os itens da barra de menu:

Debug > Attach to Process > By Process Identifier (PID) or Name...
PiTheNumber
fonte
7

No Xcode 7 é apenas:

Debug > Attach to Process by PID or Name...
Japes
fonte