2017-09-29 14 views
0

Je teste une bibliothèque qui surveille la clé USB et permet d'écouter les événements plugin/plugout. Le système cible exécute une version Linux personnalisée et le débogage est pénible pour ce systèmeComment exclure des messages printf de Catch Reporter

Donc, pour une analyse rapide de ce qui se passe, j'utilise très souvent des messages printf. Pour les tests unitaires de la bibliothèque, j'ai commencé à utiliser Catch et je génère des rapports de test en utilisant le rapporteur JUint.

Problème: Si j'insère un message printf pour l'analyse, il est ajouté au rapport xml généré par Catch.

Ma question: Y at-il un moyen de séparer printf messages et le rapport généré par Catch?

Merci. MISE À JOUR: Je veux éviter d'écrire dans un fichier, car j'ai rencontré des problèmes en cas d'erreurs et le programme se bloque avant que le fichier ne soit complètement écrit.

+0

Avoir une macro définie lors du test unitaire qui, lorsqu'elle est définie, désactive la sortie de débogage? –

+0

Ceci est mon premier test Catch, et je veux m'assurer que tout fonctionne comme prévu. Donc, je veux garder les deux. –

Répondre

1

Il existe un autre moyen.

Vous pouvez imprimer vos messages de débogage à stderr au lieu de stdout en utilisant fprintf comme ceci:

fprintf(stderr, "%d\n", c); 

Depuis le rapport de Catch est écrit stdout vous pouvez alors rejeter votre sortie redirection en utilisant, par exemple sur les systèmes Linux:

./a.out -r junit 2> /dev/null 
+0

J'ai essayé, mais Catch capture aussi std-err. Les messages de débogage sont ajoutés à une balise spéciale en XML nommée "system-err" ou "system-out". –

+0

Etes-vous sûr que ce n'est pas le résultat de votre configuration? Je fais exactement cela et cela fonctionne pour moi ... –

+0

D'accord, ça a marché maintenant. Je n'ai pas essayé la redirection car je ne comprends pas comment cela peut affecter le fichier de sortie de catch. C'est confus pour moi. Mais votre solution a fonctionné. Je vous remercie! –

1

Pas vraiment familier avec Catch, mais une solution évidente est d'imprimer vers un emplacement non standard. Ainsi, par exemple, fopen un fichier journal et fprintf à la place de la sortie standard.

Aussi, tout à fait sans rapport avec votre question, mais peut vous aider avec votre problème, vous pouvez utiliser gdbserver pour déboguer sur la plate-forme. Recherchez simplement "débogage distant gdbserver" pour obtenir des instructions sur la façon de procéder.

Édité pour ajouter: Si vous craignez que le fichier ne soit tronqué en cas de plantage, remplacez simplement "printf" par un wrapper qui fait aussi fflush.

+0

J'ai reformulé ma question pour refléter ce que je cherche exactement.Et en ce qui concerne l'utilisation du fichier, j'ai pensé à cette méthode et je le ferai en effet s'il s'avère qu'il n'y a pas d'autre solution facile. –

0

Si vous acceptez d'écrire la sortie dans un fichier, il existe une solution simple. Utilisez le -o option pour modifier où Catch place sa sortie.

Vous pouvez l'utiliser comme -o report.xml pour que la sortie soit placée dans un fichier appelé report.xml ou vous pouvez utiliser un fichier spécial appelé %debug. Lorsqu'il est passé %debug en tant que fichier de sortie, Catch tente d'écrire sur la fonction de débogage qu'il connaît pour une plate-forme donnée, qui est stderr pour Android.