我正在从tensorflow调试decode_raw_op_test。测试文件是用Python编写的,但是它通过基础C 文件执行代码。
使用PDB,我可以调试Python测试文件,但是它无法识别C 文件。有什么办法可以调试C 代码的基础?
(我尝试使用decode_raw_op_test上的gdb,但它给出了"未识别的文件格式:文件格式")
调试混合的python和C 程序很棘手。但是,您可以使用gdb
调试TensorFlow的C 部分。有两种主要方法:
-
在
gdb
下运行python
,而不是测试脚本本身。假设您的测试脚本在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
,这是从Python进入Tensorflow中C 的主要入口。 -
将
gdb
附加到运行过程。您可以使用ps
获取Python测试的过程ID,然后运行(其中$PID
是过程ID):$ gdb -p $PID
您可能需要安排您的Python代码阻止,以便有时间附加。调用
raw_input()
函数是一种简单的方法。
可以使用以下步骤进行调试:
gdb python
然后在GDB提示下,键入
run bazel-bin/tensorflow/python/kernel_tests/decode_raw_op_test
添加MRRY的答案,在今天的TF2环境中,主要入口点是tfe_execute,这应该是您添加断点的地方。