调试 TensorFlow 测试:pdb 还是 gdb?

Nay*_*ana 5 python gdb pdb tensorflow

我正在从 TensorFlow 调试 decode_raw_op_test。测试文件是用 python 编写的,但它执行来自底层 C++ 文件的代码。

使用 pdb,我可以调试 python 测试文件,但是它不能识别 c++ 文件。有没有办法调试底层的 C++ 代码?

(我尝试在 decode_raw_op_test 上使用 gdb,但它给出了“文件不是可执行格式:文件格式无法识别”)

mrr*_*rry 7

调试混合的 Python 和 C++ 程序很棘手。但是,您可以使用它gdb来调试 TensorFlow 的 C++ 部分。有两种主要方法可以做到这一点:

  1. python在 下运行gdb,而不是测试脚本本身。假设您的测试脚本在bazel-bin/tensorflow/python/kernel_tests/decode_raw_op_test. 您将运行以下命令:

    $ gdb python bazel-bin/tensorflow/python/kernel_tests/decode_raw_op_test
    (gdb) run
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,gdb它对调试代码的 Python 部分没有很好的支持。我建议将您运行的测试用例缩小到一个简单的测试,并在 TensorFlow C API 方法上设置断点,例如TF_Run,这是在 TensorFlow 中从 Python 到 C++ 的主要入口点。

  2. 附加gdb到正在运行的进程。您可以使用ps然后运行获取 Python 测试$PID的进程 ID (进程 ID在哪里):

    $ gdb -p $PID
    
    Run Code Online (Sandbox Code Playgroud)

    您可能需要安排 Python 代码进行阻塞,以便有时间进行附加。调用该raw_input()函数是一种简单的方法。