GDB中对象显示0x0的含义?如何查看其内部内容?
关于GDB中
__pyx_v_doc为空指针的问题解答 Absolutely—yes, that 0x0 (hexadecimal for 0) definitely means your __pyx_v_doc pointer is null—it’s not pointing to a valid spacy.tokens.doc.Doc object at all. A null pointer indicates the variable hasn’t been assigned to a real instance of the Doc class, so there’s no "internal content" to view right now.
接下来你可以这么做:
- 先排查空指针的原因
- 在GDB中运行
bt命令打印当前调用栈,这能帮你看清代码执行到了哪一步,检查是不是在变量初始化/赋值前就尝试访问它了。 - 如果这个变量是通过某个函数调用(比如
spacy.nlp())赋值的,要确认函数没有返回空指针。如果可以的话,你可以直接在GDB里调用该函数测试:p __pyx_v_nlp("test sentence")
- 在GDB中运行
- 当指针不为空时,查看内部内容
当你得到一个有效的非空指针(比如$27 = (__pyx_obj_5spacy_6tokens_3doc_Doc *) 0xabc123),可以通过以下方式查看内部内容:- 解引用指针查看所有成员:
p *__pyx_v_doc - 查看类型定义来理解对象结构:
ptype __pyx_obj_5spacy_6tokens_3doc_Doc - 如果对象有可访问的方法或属性,你可以直接访问(取决于Cython编译后的结构),比如:
p __pyx_v_doc->__pyx_base call __pyx_v_doc->__pyx_f_5spacy_6tokens_3doc_Doc_text(__pyx_v_doc)
- 解引用指针查看所有成员:
内容的提问来源于stack exchange,提问作者Jack Peng
相关产品推荐
相关产品推荐

