2016-11-30 1 views
3

Je suis le débogage decode_raw_op_test de tensorflow. Le fichier de test est écrit en python mais il exécute du code à partir de fichiers C++ sous-jacents.Débogage des tests TensorFlow: pdb ou gdb?

En utilisant pdb, je pourrais déboguer fichier de test python mais il ne reconnaît pas le fichier C++. Existe-t-il un moyen de déboguer le code C++ sous-jacent?

(j'ai essayé d'utiliser gdb sur decode_raw_op_test mais il donne « Fichier en format exécutable: Format de fichier non reconnu »)

Répondre

3

Mise au point d'un programme Python mixte et C++ est délicate. Vous pouvez cependant utiliser gdb pour déboguer les parties C++ de TensorFlow. Il y a deux façons de le faire:

  1. Run python sous gdb, plutôt que le script de test lui-même. Disons que votre script de test est dans bazel-bin/tensorflow/python/kernel_tests/decode_raw_op_test. Vous exécutez la commande suivante:

    $ gdb python bazel-bin/tensorflow/python/kernel_tests/decode_raw_op_test 
    (gdb) run 
    

    Notez que gdb n'a pas un grand soutien pour le débogage des parties Python du code. Je recommande rétrécissement le cas de test que vous exécutez à un seul test simple, et la fixation d'un point d'arrêt sur une méthode API tensorflow C, comme TF_Run, qui est le principal point d'entrée de Python en C++ dans tensorflow.

  2. Fixer gdb à un processus en cours. Vous pouvez obtenir l'ID de processus du test Python à l'aide ps puis exécutez (où $PID est l'ID de processus):

    $ gdb -p $PID 
    

    Vous aurez probablement besoin d'organiser votre code Python pour bloquer afin qu'il y ait le temps de joindre. Appeler la fonction raw_input() est un moyen facile de le faire.

+0

Merci! Je voudrais essayer cela. Je débogue quelques tests supplémentaires à partir du module python TensorFlow comme sparse_split_op_test et string_to_hash_bucket_test. Pourriez-vous s'il vous plaît fournir vos entrées sur [this] (http://stackoverflow.com/questions/40675340/tensorflow-python-tests-failing)? – Nayana

1

pourrait débogage à l'aide étapes ci-dessous:

gdb python 

puis invite de gdb, le type

run bazel-bin/tensorflow/python/kernel_tests/decode_raw_op_test