我发布了一个经过编辑的问题,因为原始问题中的segfaults和第三方库的整个业务只是让人分心。
我所拥有的是一个使用xerces-c和segfaults的程序(在进程中创建一个核心转储)。我想要做的是启动gdb并从核心转储遍历创建的DOMDocument。
例如,我想要获取给定DOMElement或它的子节点的属性,等等。有没有我能读到的描述DOMElements内部结构等内容的文章?或者甚至给我一些关于xerces-c源代码的参考资料,因为我在我的源代码tarball中找不到DOMElement的源代码。(拥有源代码可能会有所帮助,因为我确切地知道了DOMElement是如何实现的,从而允许我遍历它)。
正如我所说的,我不太熟悉xerces-c代码库,apache文档显然很糟糕。
原问题:
我使用的是一个第三方库,它反过来使用xercesc在某个地方进行xml解析,这就是segfaulting。如何从core-dump检查xerces-c元素?
我可以访问库源代码,它在一个使用DOMElement引用作为函数参数的函数中出现了分段错误。就像这样
void func (DOMElement& e, ...) {
}我想从核心转储中检查这个DOMElement (就像在打印它的名称、标记、子元素等。基本上遍历这个DOMElement下面的DOMDocument ),但是我不熟悉xerces-c代码库。
你知道我该怎么做吗?
附加信息:-我正在使用gdb。
发布于 2012-05-11 00:56:51
如果您使用的是gdb,我假设您使用的是linux,对吗?然后,您应该安装libexerces-c++-dev (或libexerces-c++-devel,取决于您的发行版)包和源代码。这将允许您甚至在xerces代码中设置断点。
我过去经常使用xerces,当它崩溃时,问题通常不是在库本身,而是在“调用者”。在您的例子中,我将使用外部库创建一个非常简单的项目,并尝试解析一个简单的已知工作的XML文件,因为即使您能找到崩溃指令,我也怀疑它是否有帮助,因为xerces不是由您直接使用的,而是由另一个库使用的
https://stackoverflow.com/questions/10537470
复制相似问题