2012-04-24 2 views
3

J'essaie de déboguer une application de ligne de commande C en utilisant Xcode sur OS X Lion. L'application a besoin de beaucoup de données d'entrée via une entrée standard. Sur le shell, je viens de rediriger un fichier texte dans cette application.Piping Into application sous Xcode

Comment puis-je faire cela avec Xcode?

+0

duplication possible de [Comment puis-je rediriger stdin à partir d'un fichier vers l'exécutable dans Xcode 4?] (Http://stackoverflow.com/questions/7629886/how-can-i-pipe-stdin-from-a-file- au-exécutable-en-xcode-4) – David

Répondre

2

Juste pour une meilleure clarification de @ réponse de Nestor ....

je ne pouvais pas trouver un moyen de tuyau dans x code donc j'ajouté le code suivant au début de mon script canalisé à partir d'un fichier de test appelé fichier de test.

// For debugging 
if (argc == 2 && strcmp(argv[1], "debug") == 0) { 
    printf("== [RUNNING IN DEBUG MODE]==\n\n"); 
    char test_file_path[] = "/Users/bonobos/are/amazing/test.txt"; 
    freopen(test_file_path, "r", stdin); 
} 

Notez que j'ai besoin du chemin complet du fichier parce que quand Xcode compile va à certains dossiers au hasard étrange et donc si vous ne voulez pas déranger l'emballage des ressources de texte que vous êtes mieux d'utiliser un chemin absolu. Freopen envoie le contenu des fichiers dans stdin.

aussi parce que j'ai cette instruction si j'ai mis en place xcode pour avoir l'argument de débogage. cela bat le faire avec des commentaires et oublier de décommenter quand vous compilez pour realsies.

à mettre en place l'argument Xcode, aller à:

Produit> Système> Schéma d'édition Edit Scheme

Configurez ensuite l'argument 'debug' dans le schéma d'exécution:

add argument debug

1

Vous ne pouvez malheureusement pas. Je vais avoir à modifier mon programme pour lire à partir d'un fichier à des fins de débogage, comme ceci:

NSFileHandle *input; 

    if (AmIBeingDebugged()) 
     input = [NSFileHandle fileHandleForReadingAtPath:@"/Users/me/debug.input"]; 
    else 
     input = [NSFileHandle fileHandleWithStandardInput]; 

La source de AmIBeingDebugged est here.

1

Vous pouvez acheminer des données dans l'exécutable d'un projet Xcode pour le débogage. Voir ma réponse à une question Stackoverflow similaire here.

(copié pour des raisons pratiques):

Dans Xcode 4.5.1:

  1. Ouvrez l'éditeur de système (menu produit -> Modifier le schéma ...)
  2. Sélectionnez le mode débogage Exécuter
  3. Dans l'onglet 'Infos', modifiez la sélection du bouton radio 'Lancer' de 'Automatiquement' à 'Attendre le lancement de MyApp.app'
  4. Fermez l'éditeur de schéma
  5. Appuyez sur le bouton Exécuter pour générer et exécuter votre cible. (La fenêtre d'état de Xcode dans la barre d'outils affiche 'En attente de lancement de MyApp')
  6. Lancez Terminal et cd dans le dossier de votre application. (Ce sera quelque chose comme/Users/utilisateur/Bibliothèque/Développeur/Xcode/DerivedData/MyApp- dmzfrqdevydjuqbexdivolfeujsj/Build/Products/Debug/)
  7. Lancez votre tuyauterie d'application dans tout ce que vous voulez dans l'entrée standard:

    echo mydata | ./MyApp.app/Contents/MacOs/MyApp

  8. Commutateur retour à Xcode et le débogueur aura détecté le lancement de votre application et attaché à elle.

+0

Mon problème avec ceci est que vous devez ouvrir une session Terminal à chaque fois que vous exécutez. Vous pouvez aussi simplement copier et coller le contenu de 'mydata' dans la zone de la console à chaque fois (ce que j'essayais d'éviter quand je suis allé chercher ce post). – anthropomorphic