web-dev-qa-db-fra.com

Comment obtenir la sortie d'une application os x sur la console ou dans un fichier?

J'écris une application Cocoa avec Mono intégré. Je veux courir et voir ma sortie de débogage dans le terminal. Du côté cacao, j’utilise NSLog() et du côté mono, j’utilise Debug.Write(). Je peux voir ma sortie de débogage dans la console de xcode, mais pas dans Terminal. C'est ce que j'ai essayé: 

 $: open /path/build/Debug/MyProgram.app
$: open /path/build/Debug/MyProgram.app> sortie 2> sortie 

dans un terminal mais je ne fais pas ma sortie sur la console ou en "sortie".

Quelle est la commande correcte?

PS Mon but ultime est d'écrire un plugin vim pour gérer, construire, exécuter, déboguer le projet xcode. Vous pouvez me sauver cette galère si vous pouvez obtenir ce vi input manager pour travailler avec xcode.

37
phi

Chris a donné un bon aperçu du fonctionnement de la console, mais pour répondre spécifiquement à votre question: si vous voulez voir les résultats directement sur votre terminal, vous devez exécuter le produit construit en tant qu'enfant du terminal, ce qui signifie 

/path/debug/build/MyProgram.app/Contents/MacOS/MyProgram

pour lancer l'application.

58
Lily Ballard

Terminal sous Mac OS X n'est qu'une autre application. L'ouverture d'une fenêtre de terminal pour les E/S texte n'est pas une fonctionnalité inhérente à toutes les applications, comme c'est le cas sous Windows.

De plus, open /path/to/MyApp.app n'exécute pas MyApp.app en tant que sous-processus de votre shell, il envoie un message à l'infrastructure de lancement du système d'exploitation, demandant à it d'exécuter l'application de manière normale, comme si vous double-cliquiez dans le Finder ou cliqué dans le Dock. C'est pourquoi vous ne pouvez pas simplement rediriger sa sortie pour voir ce que votre application envoie à stdout ou stderr.

Vous pouvez utiliser Console.app pour voir la sortie des applications lancées de manière normale, car l'infrastructure de lancement envoie spécifiquement leurs stdout et stderr à cet endroit. Vous pouvez également utiliser les routines asl pour interroger le journal ou effectuer une journalisation plus sophistiquée si vous le souhaitez.

12
Chris Hanson

Ouvrez Console.app dans/Applications/Utilitaires. Toutes les sorties NSLog seront imprimées dans le journal système.

Ou, si vous l'exécutez à partir de Xcode, toutes les sorties seront imprimées dans la console Debug.

Je ne suis pas sur mon Mac pour le moment et je ne me souviens pas de la séquence de commandes ni du menu dans lequel se trouve la console de débogage, peut-être du menu Générer?

10
Grant Limberg