TensorFlowのC++コードは、それを呼び出すPythonコードと同じプロセスで実行されます(または、分散バージョンを使用している場合は、tf.GrpcServer
を作成したPythonプログラムの1つと同じプロセスで実行されます)。
PythonとC++の最も簡単なインターフェイスは、pure-C APIのtensor_c_api.h
です。これらの呼び出しの1つをインターセプトするには、TensorFlowを実行しているPythonインタプリタのプロセスIDにgdb
を添付し、これらの関数のいずれかにブレークポイントを作成します。インタラクティブPythonのセッションを使用して、例えば
、第1の端子に入力:
$ python
>>> import tensorflow
>>> import os
>>> os.getpid()
14680
そして、他の端末では、gdb
を開始:
戻るPythonのインタープリターで
$ gdb -p 14680
[...]
(gdb) break TF_NewSession
Breakpoint 1 at 0x7f15f450a4d0
(gdb) continue
Continuing.
、作成新しいセッション:
>>> sess = tf.Session()
インタープリタが一時停止し、あなたのdeb
Breakpoint 1, 0x00007f15f450a4d0 in TF_NewSession() from [...]/tensorflow/python/_pywrap_tensorflow.so
(gdb) backtrace
#0 0x00007f15f450a4d0 in TF_NewSession() from [...]/tensorflow/python/_pywrap_tensorflow.so
#1 0x00007f15f3ac5cdb in _wrap_TF_NewSession() from [...]/tensorflow/python/_pywrap_tensorflow.so
#2 0x000000000049968d in PyEval_EvalFrameEx()
#3 0x00000000004a090c in PyEval_EvalCodeEx()
#4 0x0000000000499a52 in PyEval_EvalFrameEx()
[...]
あなたは今TensorFlowをデバッグするgdb
のフルパワーを使用することができます。uggerは、次のようなものを出力します。
誰かがUbuntuで動作していて、同じuid'_で動作していてもプロセスにアタッチできない場合は、[これを試す必要があります](http: //askubuntu.com/questions/41629/after-upgrade-gdb-wont-attach-to-process)。 –
私はこの手順に従いました。新しいセッションを作成すると、作成は途切れることなく完了しました。@ mrry次に、PythonはTF_NewSessionの代わりにTF_NewDeprecatedSessionを使用します。今問題は解決されています。すごい! –