파이썬을 실행하는 동안 C++ 부분을 디버깅하는 방법을 찾았습니다. (Python 책에서 프로세스 ID 탐지에 대해 읽는 동안 그것을 깨달았다.).
먼저 C++ 프로그램이 포함 된 Python 프로그램을 실행합니다. 파이썬 프로그램을 시작할 때 raw_input()을 사용하여 프로그램이 입력을 기다리게하십시오. 하지만 그 전에는 print os.getpid()
(물론 os 패키지를 가져와야합니다)을 수행하십시오. 파이썬 프로그램을 실행하면 실행중인 파이썬 프로그램의 pid가 인쇄되어 키보드 입력을 기다리게됩니다.
파이썬 중지 코드 :
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++ 코드가 있으며 파이썬 래퍼 기능이 향상됩니다). 27352는 PID입니다. 당신이 DDD처럼 사용하여 그래픽 디버깅을 사용하려면 다음
gdb caffe-fast-rcnn/python/caffe/_caffe.so 27352
같은 다른 쉘 시작 GDB 나,
ddd caffe-fast-rcnn/python/caffe/_caffe.so 27352
이 그럼 당신은 gdb를 시작보고 프롬프트를 기다릴 것이다 않습니다. 파이썬 프로그램은 gdb에 의해 인터럽트되고 정지 모드에서 기다린다. (키 입력을 기다리고 있었지만 실제로는 멈춤 모드이다. 그리고 대기중인 키를 계속 진행하기 위해 두 번째 디버거에서 gdb continue 명령이 필요하다.) ,
이제
br solver.cpp:225
처럼 GDB에서 브레이크 포인트 명령을 줄 수 있으며 (즉, 프로그램을 유지했다) 두 번째 GDB 창에서 continue
명령을 줄 때 당신은 메시지
같은
Breakpoint 1 at 0x7f2cccf70397: file src/caffe/solver.cpp, line 226. (2 locations)
볼 수 있습니다 파이썬 코드가 다시 실행됩니다. 물론 첫 번째 gdb 창에 키 입력을해서 처리를 진행시켜야합니다.
적어도 파이썬 프로그램을 실행하는 동안 C++ 코드를 디버깅 할 수 있습니다.
나는 파이썬과 C++ 디버깅을 동시에 할 수 있는지 나중에 확인했다. ddd -pydb prog1.py options..
과 같은 디버거 (DDD)를 시작하고 위에서 설명한 방법을 사용하여 다른 DDD를 연결합니다. 이제 파이썬과 C++에 대한 중단 점을 설정하고 각 창에서 다른 디버그 함수를 사용할 수 있습니다. (나는 이것을 몇 달 전에 알고 있었으면 좋았을 것입니다.
![enter image description here](https://i.stack.imgur.com/dSPHy.jpg)
편집 : PID를 얻을, 대신 ps -aux | grep python
할 수 있습니다. 이 pid는 ddd의 pid 다음입니다.
정확하게 대답은 아니지만 몇 가지 아이디어를 제공 할 수 있습니다. http://www.brendangregg.com/blog/2016-08-09/gdb-example-ncurses.html –