私はPythonを実行している間にC++のデバッグ方法を見つけました。 (Pythonの本でプロセスIDの検出について読んでいる間に実現しました)。
まず、C++プログラムを含むpythonプログラムを実行します。 Pythonプログラムの開始時に、raw_input()を使用してプログラムが入力を待つようにします。しかし、その前にはprint os.getpid()
(もちろんosパッケージをインポートする必要があります)を実行してください。 Pythonプログラムを実行すると、実行中のPythonプログラムのpidが表示され、キーボード入力を待つことになります。
のpythonストップコード:
import os
def w1(str):
print (str)
wait = raw_input()
return
print os.getpid()
w1('starting main..press a key')
結果:
27352
starting main..press a key
それとも、あなたは以下のコメント(感謝@AndyG)として輸入PDB、pdb.set_trace()を使用して、[編集]を見ることができます*。 ps -aux
を使用してPIDを取得する。
ここで、C++共有ライブラリが_caffe.soであるとします(この_caffe.soライブラリはすべてのC++コードを持ち、Pythonラッパー関数を強化します)。 27352はpidです。その後
gdb caffe-fast-rcnn/python/caffe/_caffe.so 27352
か、DDDのように使用してグラフィカルなデバッグを使用したい場合は、
ddd caffe-fast-rcnn/python/caffe/_caffe.so 27352
を行うその後、あなたはgdbの開始を参照してプロンプトを待っていますように別のシェル開始GDBインチPythonプログラムはgdbによって中断され、停止モード(キー入力を待っていましたが、実際は停止モードです。
今(つまり、プログラムを保持していた)あなたは
br solver.cpp:225
のようにgdbでのブレークポイントのコマンドを与えることができますし、第二のgdbのウィンドウにcontinue
コマンドを与えるときあなたは
Breakpoint 1 at 0x7f2cccf70397: file src/caffe/solver.cpp, line 226. (2 locations)
のようなメッセージを見ることができ、 Pythonコードが再び実行されます。もちろん、最初のgdbウィンドウにキー入力を与えて、それを進めるべきです。
少なくとも、Pythonプログラムを実行している間にC++コードをデバッグすることができます(これは私がやりたいことです)!
私はPythonとC++のデバッグを同時に行うことができるかどうかを後で確認して動作します。 ddd -pydb prog1.py options..
のようなデバッガ(DDD)を起動し、上で説明した方法を使用して別のDDDを接続します。今では、PythonとC++のブレークポイントを設定したり、各ウィンドウで他のデバッグ関数を使用したりすることができます(私はこれを数ヶ月前に知りたがっています。
![enter image description here](https://i.stack.imgur.com/dSPHy.jpg)
EDIT:PIDを取得するには、あなたの代わりにps -aux | grep python
を行うことができます。このpidはdddのpidの次のものです。
答えは正確ではありませんが、いくつかのアイデアがあります:http://www.brendangregg.com/blog/2016-08-09/gdb-example-ncurses.html –