调试TensorFlow测试:PDB或GDB



我正在从tensorflow调试decode_raw_op_test。测试文件是用Python编写的,但是它通过基础C 文件执行代码。

使用PDB,我可以调试Python测试文件,但是它无法识别C 文件。有什么办法可以调试C 代码的基础?

(我尝试使用decode_raw_op_test上的gdb,但它给出了"未识别的文件格式:文件格式")

调试混合的python和C 程序很棘手。但是,您可以使用gdb调试TensorFlow的C 部分。有两种主要方法:

  1. 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 的主要入口。

  2. 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,这应该是您添加断点的地方。

最新更新