我正在尝试调试我用 C 语言编写的 python 扩展模块。我使用以下代码编译了它:
python setup.py build -g install --user
然后我调试:
gdb python
...
b py_node_make
run test.py
它在 py_node_make(我定义的函数之一)处中断,但随后我尝试:
(gdb) print node
No symbol "node" in current context.
我要调试的函数是:
static Python_node_t* py_node_make(
node_t* node)
{
Python_node_t* pyNode;
pyNode = PyObject_New(Python_node_t, &t_node);
pyNode->node = node;
pyNode->borrowed = true;
return pyNode;
}
最佳答案
要使源代码调试工作,您的 C 扩展必须使用调试信息 (gcc -g
) 构建。由于您正在使用 distutils
驱动编译过程,因此您可以指定通过 CFLAGS 环境变量 ( Installing Python Modules: Tweaking compiler/linker flags ) 使用的编译器标志:
CFLAGS='-Wall -O0 -g' python setup.py build
请注意,即使 distutils 默认的优化级别高于 -O0,您真的不应该得到 No symbol "node"in current context 错误,只要因为 -g 已通过,大多数 Python 构建默认会通过 -g。
关于Python扩展调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15253586/