我正在尝试使用GDB的Django应用程序进行反向调试。我让它在GDB中运行,但我无法让它向后运行。
我使用Ctrl-Z停止了我的Django应用程序,然后在gdb提示符下输入reverse-next
,收到错误消息“目标多线程不支持此命令。”
我做错了吗?这不可能吗?都?
答案 0 :(得分:2)
在使用GDB进行反向调试之前,您必须通过target record
命令告诉它记录您的程序执行情况(以便它可以播放),如文档here所示。
我不确定这会帮助你调试你的Django应用程序--GDB非常适合调试“本机”代码(编译C/C++
),并且不非常适合调试“解释”代码(正向或反向)。
答案 1 :(得分:1)
<强> RevDB 强>
https://bitbucket.org/pypy/revdb
https://morepypy.blogspot.co.uk/2016/07/reverse-debugging-for-python.html
这个项目旨在允许pdb
- 就像反向调试一样,除非你正在调试Python解释器本身,否则这可能是你想要的。
截至2017年,它仍处于早期阶段,您必须从源代码构建。
如何质疑未提及GDB:Is it possible to step backwards in pdb?
最后,GDB反向调试还很不成熟,例如不处理AVX扩展程序Disable AVX-optimized functions in glibc (LD_HWCAP_MASK, /etc/ld.so.nohwcap) for valgrind & gdb record,因此我强烈建议您使用rr
:https://github.com/mozilla/rr(RevDB声称可以从中获取灵感)。
答案 2 :(得分:0)
这是一个非常好的问题。
我的第一个冲动是确保我使用IPython作为django的shell,看看它的pdb支持在这种情况下是否会有所帮助。 Pdb应该有一个非常类似于gdb的接口。我记得,gdb是用来调试C / C ++程序的,而django是由python解释器执行的。使用Pdb在这里:
http://ericholscher.com/blog/2008/aug/31/using-pdb-python-debugger-django-debugging-series-/
您也可以尝试使用django-extensions来访问werkzeug调试视图。