调试TensorFlow测试:pdb还是gdb?

时间:2016-11-30 13:08:20

标签: python gdb tensorflow pdb

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

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

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

2 个答案:

答案 0 :(得分:4)

调试混合的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
    

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

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

    $ gdb -p $PID
    

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

答案 1 :(得分:1)

可以使用以下步骤进行调试:

gdb python

然后在gdb提示符下键入

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