我正在调试TensorFlow中的decode_raw_op_test。测试文件是用python编写的,但是它从底层的C ++文件中执行代码。
使用pdb,我可以调试python测试文件但是它不能识别c ++文件。有没有办法调试底层的c ++代码?
(我尝试在decode_raw_op_test上使用gdb,但它提供“文件不是可执行格式:文件格式无法识别”)
答案 0 :(得分:4)
调试混合的Python和C ++程序很棘手。但是,您可以使用gdb
来调试TensorFlow的C ++部分。有两种主要方法可以做到这一点:
在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 ++的主要入口点
将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