是否可以使用GDB的Python反向调试?怎么样?

时间:2010-09-27 04:22:58

标签: python django gdb reverse-debugging

我正在尝试使用GDB的Django应用程序进行反向调试。我让它在GDB中运行,但我无法让它向后运行。

我使用Ctrl-Z停止了我的Django应用程序,然后在gdb提示符下输入reverse-next,收到错误消息“目标多线程不支持此命令。”

我做错了吗?这不可能吗?都?

3 个答案:

答案 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,因此我强烈建议您使用rrhttps://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调试视图。