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

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

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

最佳答案
使用你建议的技术,这是有效的(虽然它不漂亮):

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,但我不熟悉它们.可能有更好的方法来实现你正在寻找的东西.

转载注明原文:如何在gdb中的python函数上设置断点 - 代码日志