Comment attacher le débogueur à l'application iOS après le lancement?


101

J'ai un problème que je dépannage qui se produit très rarement et qui ne semble pas se produire lorsque des choses fonctionnent sous Xcode.

Est-il possible d'exécuter une application normalement (c'est-à-dire à partir de Springboard) jusqu'à ce que mon problème se produise, puis de joindre un débogueur à ce stade?

Je préférerais faire cela sans jailbreak si possible.

Réponses:


124
  • Connectez votre appareil connecté à votre Mac
  • Déboguer> Attacher au processus par PID ou par nom
  • Dans la feuille de dialogue, entrez le nom de votre application tel qu'il apparaît dans le navigateur de débogage lors du démarrage via Xcode.

Si l'application est déjà en cours d'exécution, le débogueur s'attachera au processus en cours d'exécution. S'il n'est pas en cours d'exécution, il attendra le lancement de l'application, puis l'attachera.


Ole, merci pour la réponse. Je cherchais un moyen de faire cela. Lorsque je vais attacher le débogueur, il semble qu'il soit joint mais j'obtiens ce message: avertissement: impossible de lire les symboles pour / var / mobile / Applications / {GUID} / {APPNAME} .app / {APPNAME} (fichier non a trouvé). Lorsque j'appuie sur le bouton «stop» dans XCode, l'application se termine. Il semble qu'il ne trouve pas les symboles de débogage, bien qu'il soit construit en mode débogage. Des idées?
Brian

4
J'ai un problème avec le Si elle ne fonctionne pas, elle attendra le lancement de l'application, puis la pièce jointe. partie. Ça ne marche pas. J'utilise le nom du processus pour attendre que l'application appelle. Je lance l'application sur l'iPhone, mais le débogueur ne réalise jamais que l'application a démarré.
Jonny

1
@BrianV - vous devez vous assurer que vous compilez avec -ggdb si vous voulez pouvoir vous attacher au processus.
itfische

4
Je suis d'accord avec Jonny; mon expérience est que l'attachement fonctionne sur le simulateur, mais ne se connecte pas à l'appareil réel.
James Moore

4
REMARQUE: Dans Xcode 5.0.1+, il s'agit de Debug > Attach to Process > By Process Identifier (PID) or Name stackoverflow.com/a/20193088/175830
Jason Axelson

117

Je vais laisser cela ici car aucune des 2 autres réponses ne m'a donné assez de détails sans un peu de difficulté.

  1. Exécutez votre application dans le simulateur et notez le nom dans le navigateur de débogage entrez la description de l'image ici

  2. Branchez votre appareil et n'oubliez pas de sélectionner votre appareil comme cible entrez la description de l'image ici

  3. Déboguer> Attacher au processus> Par identificateur de processus (PID) ou nom entrez la description de l'image ici
  4. Saisissez le nom de l'étape 1 et joignez-le. Cela devrait être tout ce que vous avez à faire. entrez la description de l'image ici

8
Vous devriez avoir 1000 votes positifs. Déboguer des choses qui commencent via un schéma d'URL personnalisé peut être une douleur dans le cul sans cette astuce. Merci beaucoup!
txulu le

2
J'aurais aimé voir cette réponse avant de passer 20 minutes à comprendre par moi-même :(
simon_smiley

7
Cela fonctionne en ce sens qu'il s'attache au processus, mais je ne vois pas comment obtenir une sortie de journal, ce dont j'ai vraiment besoin. Des idées?
Orlando

2
@Orlando - Si vous recherchez une sortie de journal, je recommande vivement DeviceConsole: github.com/rpetrich/deviceconsole
orion elenzil

1
J'ai fait exactement ce que vous avez suggéré. et j'obtiens une erreur: Could not attach to PIDj'ai essayé à la fois le nom et son identifiant. J'ai essayé pendant que l'application était en cours d'exécution et pendant qu'elle était arrêtée ..
Honey

49

Dans Xcode 5.0.1 et 6, ce sont les éléments de la barre de menu:

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

7

Dans Xcode 7, c'est juste:

Debug > Attach to Process by PID or Name...
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.