2016-11-30 30 views
3

我正在從TensorFlow調試decode_raw_op_test。測試文件是用python編寫的,但是它執行底層C++文件的代碼。調試TensorFlow測試:pdb或gdb?

使用pdb,我可以調試python測試文件,但它不識別C++文件。有沒有一種方法可以調試底層C++代碼?

(我試圖使用上decode_raw_op_test GDB但它給「在可執行格式文件不:無法識別文件格式」)

回答

3

調試混合Python和C++程序是棘手的。但是,您可以使用gdb來調試TensorFlow的C++部分。主要有兩種方法可以做到這一點:

  1. 運行pythongdb下,而不是測試腳本本身。假設您的測試腳本位於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()函數是一個簡單的方法。

+0

謝謝!我會試試這個。我正在調試來自TensorFlow python模塊的更多測試,比如sparse_split_op_test和string_to_hash_bucket_test。你能否提供你的意見[this](http://stackoverflow.com/questions/40675340/tensorflow-python-tests-failing)? – Nayana

1

能調試使用下面的步驟:

gdb python 

然後在gdb的提示符下,鍵入

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