2016-05-13 3 views
3

Je suis en train de déboguer une application en utilisant cuda-memcheck. Ce que je veux faire est de rediriger la sortie de mon application vers un fichier, mais d'un autre côté, rediriger stdout et stderr du cuda-memcheck dans un autre fichier. Mais je ne peux pas le faire fonctionner. Ceci:Windows cmd redirect sous-commande de sortie dans le fichier

cuda-memcheck "app.exe > stdout1.txt" > memcheck.log 2>&1 

ne fait absolument rien. Mais si je supprime la redirection à l'intérieur des guillemets (en ignorant la sortie de mon application), elle s'exécute. Donc, la question est, comment faire pour rediriger stdout de sous-commande?

+0

Avez-vous essayé l'option cmd '--log-file' et/ou' --save' de 'cuda-memcheck'? – kangshiyin

+0

Cela redirige la sortie memcheck, mais pas la sortie de l'application qu'elle lance. – Jofo

Répondre

1

D'après votre commentaire sur le comportement de cuda-memcheck, vous pouvez utiliser la commande suivante.

cuda-memcheck --log-file memcheck.log app.exe >app.stdout.txt 

Modifier

Voici mon test sur CentOS. Cela peut fonctionner pour l'application console Win32 mais pas pour l'application Win32.

a.cu

#include <iostream> 
int main() { 
    std::cout<< "hello world to stdout!" <<std::endl; 
    std::cerr<< "hello world to stderr!" <<std::endl; 
    return 0; 
} 

commande Compile:

$ nvcc -O3 -o a a.cu 

commande Exécuter:

$ cuda-memcheck --log-file mem.log a >a.stdout.log 2>a.stderr.log 

fichiers de résultat:

$ cat mem.log 
========= CUDA-MEMCHECK 
========= ERROR SUMMARY: 0 errors 

$ cat a.stdout.log 
hello world to stdout! 

$ cat a.stderr.log 
hello world to stderr! 
+0

ne fonctionne toujours pas, le "app.stdout.txt" est vide après le debug – Jofo

+0

@Jofo S'il vous plaît voir mon test. Je ne sais pas pourquoi cela ne fonctionne pas pour vous. – kangshiyin

+0

@Jofo Cela fonctionne sur CentOS. Vous pourriez avoir besoin de changement sur Windows. – kangshiyin