我正在從TensorFlow調試decode_raw_op_test。測試文件是用python編寫的,但是它執行底層C++文件的代碼。調試TensorFlow測試:pdb或gdb?
使用pdb,我可以調試python測試文件,但它不識別C++文件。有沒有一種方法可以調試底層C++代碼?
(我試圖使用上decode_raw_op_test GDB但它給「在可執行格式文件不:無法識別文件格式」)
我正在從TensorFlow調試decode_raw_op_test。測試文件是用python編寫的,但是它執行底層C++文件的代碼。調試TensorFlow測試:pdb或gdb?
使用pdb,我可以調試python測試文件,但它不識別C++文件。有沒有一種方法可以調試底層C++代碼?
(我試圖使用上decode_raw_op_test GDB但它給「在可執行格式文件不:無法識別文件格式」)
調試混合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()
函數是一個簡單的方法。
能調試使用下面的步驟:
gdb python
然後在gdb的提示符下,鍵入
run bazel-bin/tensorflow/python/kernel_tests/decode_raw_op_test
謝謝!我會試試這個。我正在調試來自TensorFlow python模塊的更多測試,比如sparse_split_op_test和string_to_hash_bucket_test。你能否提供你的意見[this](http://stackoverflow.com/questions/40675340/tensorflow-python-tests-failing)? – Nayana