我正在尝试将 GDB 的反向调试与 Django 应用程序一起使用。我让它在 GDB 中运行,但我不能让它向后运行。
我用 Ctrl-Z 停止了我的 Django 应用程序,然后reverse-next
在 gdb 提示符下输入,收到错误消息“目标多线程不支持此命令”。
我做错了吗?这不可能吗?两个都?
我正在尝试将 GDB 的反向调试与 Django 应用程序一起使用。我让它在 GDB 中运行,但我不能让它向后运行。
我用 Ctrl-Z 停止了我的 Django 应用程序,然后reverse-next
在 gdb 提示符下输入,收到错误消息“目标多线程不支持此命令”。
我做错了吗?这不可能吗?两个都?
target record
在您可以使用 GDB 进行反向调试之前,您必须告诉它通过命令记录您的程序执行(以便它可以回放) ,如此处所述。
我不确定这是否会帮助您调试 Django 应用程序——GDB 非常适合调试“本机”代码(已编译C/C++
),但不适合调试“解释”代码(正向或反向)。
版本数据库
https://bitbucket.org/pypy/revdb
https://morepypy.blogspot.co.uk/2016/07/reverse-debugging-for-python.html
该项目旨在允许pdb
类似的反向调试,这可能是您想要的,除非您正在调试 Python 解释器本身。
截至 2017 年,它仍处于早期阶段,您必须从源代码构建。
如何质疑未提及 GDB:是否可以在 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声称从中获得灵感)。
这是一个非常好的问题。
我的第一个冲动是确保我使用 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 调试视图。