GDB:没有名为“”的成员

GDB: There is no member named ""

我正在编写一些代码,这些代码从一个更大的项目中调用一些 classes。我们称这个大项目为SampleProject。我有名为 libSampleProject.a 的 SampleProject 静态库。我无法显示实际代码,但我会提供一些示例:

假设 SampleProject 在名为 SamplePointers.cpp 的源文件中有一个名为 SamplePointers 的 Class。

在 SamplePointers.cpp 中,有指向 SampleProject 中其他 classes 的指针。 所以比如有一个class名为ReadXml,而ReadXml是SamplePointersclass的一个成员,作为一个指针

class SamplePointers {
    public:
        ReadXml * readXmlObject;
        <MANY OTHER POINTERS TO CLASSES>
}

仅供参考:指针在 SamplePointers class.

的构造函数中初始化

在我的 CPP 文件中,main.cpp,我打电话的地方说 Class 如下所示:

#include <iostream>
#include <SampleClass.hpp>

int main() {
    SamplePointers * sampleObject = new SamplePointers;
    sampleObject->read("sampleFile.xml");
    std::cout << sampleObject->readXmlObject->xmlDataField << "\n";
}

SamplePointers 也有读取 XML 字段的读取函数。这些字段将通过访问成员变量在 ReadXml class 中可用。 运行 这个可执行文件,打印出 xmlDataField 的值。但是,在 GDB 上调试时,我在读取行上设置了一个断点,然后我在这个路径中键入 sampleObject->readXmlObject->xmlDataField,回车,然后 gdb 说没有 no member名为 readXmlObject.

这很好奇,因为我可以使用 std::cout 将其打印出来,但是 gdb 无法物理访问对象成员变量。

知道为什么 gdb 无法访问成员吗?

示例 GDB 输出:

(gdb) file out
(gdb) b 7
(gdb) run
(gdb) <breaks at line 7>
(gdb) p sampleObject->readXmlObject->xmlDataField
There is no member named readXmlObject

此外,这里是 Makefile 的样子:

INCLUDES = -I/path/to/SamplePointersHeader -I/path/to/ReadXmlHeader -I/many/more/headers
main:
    g++ main.cpp $(INCLUDES) -L/path/to/SampleProjectLib -lSampleProject -o out
debug:
    g++ -g main.cpp $(INCLUDES) -L/path/to/SampleProjectLib -lSampleProject -o out

感谢@G.M., 的建议。我相信问题可能出在我制作库时,我在没有调试标志的情况下编译它,即 -g 标志。我重新编译了库,从目标文件中创建了库,甚至将优化级别从 -O3 更改为 -O0,这将有助于调试。

然后我用新创建的库重新编译了我的 main.cpp 文件,通过 GDB 传递它,它能够找到 Class 成员。

感谢所有的输入!