如何在gdb中的python函数上设置断点

时间:2013-01-09 14:32:33

标签: python debugging gdb cpython

我有时使用gdb来调试python脚本(当然是CPython)。通常用于调试核心转储(以及涉及c扩展模块时)。

一个基本问题是如何在gdb中的python函数上设置断点。假设我有一个带有foo函数的python脚本,我想在调用foo后立即断开。我想在PyEval_EvalFrameEx上设置条件断点可能有用,但不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

使用您建议的技术,这可行(尽管它并不漂亮):

break PyEval_EvalFrameEx if (strcmp((((PyStringObject *)(f->f_code->co_name))->ob_sval), "foo") == 0)

这里,f是PyFrameObject。您可能还需要检查f->f_code->co_filename以确保您拥有正确的文件。请注意,这确实会使程序变慢,因为您正在打破并进行大量比较。

GDB 7有一些很好的帮助宏来处理CPython,但我不熟悉它们。可能有更好的方法来实现你正在寻找的东西。