Cha*_*Kim 18 c++ python debugging boost ddd-debugger
我可以使用调试Python代码ddd -pydb prog.py
.所有python命令行参数也可以在之后传递prog.py
.在我的例子中,许多类已经在C++中实现,并且使用了python boost-python
.我希望我可以一起调试python代码和C++.例如,我想设置这样的断点:
break my_python.py:123
break my_cpp.cpp:456
cont
Run Code Online (Sandbox Code Playgroud)
当然我在用调试选项编译c ++代码后尝试它,但调试器不会跨越boost边界.有什么办法吗?
编辑:我看到http://www.boost.org/doc/libs/1_61_0/libs/python/doc/html/faq/how_do_i_debug_my_python_extensi.html.我跟着它,我可以为python和C++进行调试.但我最好还是想进行可视化调试,DDD
但我不知道怎么在里面给'target exec python'命令DDD
.如果不是(只是gdb
在链接中使用)我应该能够调试Python脚本,而不是交互式地给出链接中的python命令.
我发现了在运行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')
Run Code Online (Sandbox Code Playgroud)
结果:
27352
starting main..press a key
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用import pdb,pdb.set_trace()作为下面的注释.(感谢@AndyG)并查看EDIT*以获取pid使用ps -aux
.
现在,假设C++共享库是_caffe.so(这是我的情况.这个_caffe.so库包含所有C++代码并提升python包装器函数).27352是pid.然后在另一个shell中启动gdb之类的
gdb caffe-fast-rcnn/python/caffe/_caffe.so 27352
Run Code Online (Sandbox Code Playgroud)
或者如果您想使用类似DDD的图形调试,请执行
ddd caffe-fast-rcnn/python/caffe/_caffe.so 27352
Run Code Online (Sandbox Code Playgroud)
然后你会看到gdb启动并等待提示.python程序被gdb中断并在停止模式下等待(它正在等待你的键输入,但现在它确实处于stopeed模式,并且它需要来自第二个调试器的gdb continue命令继续进行密钥等待).
现在你可以在gdb中给出断点命令了
br solver.cpp:225
Run Code Online (Sandbox Code Playgroud)
你可以看到像这样的消息
Breakpoint 1 at 0x7f2cccf70397: file src/caffe/solver.cpp, line 226. (2 locations)
Run Code Online (Sandbox Code Playgroud)
当你continue
在第二个gdb窗口(持有程序)中给出命令时,python代码再次运行.当然,你应该在第一个gdb窗口中给出一个键输入以使其继续.
现在至少你可以在运行python程序时调试C++代码(这就是我想要做的)!
我后来检查了我是否可以同时进行python和C++调试并且它有效.您启动调试器(DDD)ddd -pydb prog1.py options..
并使用上面解释的方法附加另一个DDD.现在你可以设置python和C++的断点,并在每个窗口中使用其他调试功能(我希望我早在几个月就已经知道了.它应该有助于吨.).
编辑:要获得pid,你可以做ps -aux | grep python
.这个pid是ddd的pid的下一个.
归档时间: |
|
查看次数: |
2479 次 |
最近记录: |