0

我发布了一个经过编辑的问题,因为原始问题中的段错误和第三方库的整个业务只是分散了注意力。

我所拥有的是一个使用 xerces-c 和 segfaults 的程序(在该过程中创建一个核心转储)。我想要做的是启动 gdb 并从核心转储遍历创建的 DOMDocument。

例如,我想获取给定 DOMElement 或其子节点的属性等等。有没有人有任何我可以阅读的文章来描述 DOMElements 的内部结构等等?或者甚至指向我关于 xerces-c 源代码的一些资源,因为我无法在我的源 tarball 中找到 DOMElement 的源代码。(从那时起,拥有源代码可能会有所帮助,因为我确切地知道 DOMElement 是如何实现的,允许我遍历它)。

正如我所说,我对 xerces-c 代码库不太熟悉,而 apache 文档显然很糟糕。

原始问题:-

我正在使用第三方库,而该库又使用 xercesc 进行 xml 解析,这会导致段错误。如何检查核心转储中的 xerces-c 元素?

我可以访问库源代码,并且它在使用 DOMElement 引用作为函数参数的函数中出现段错误。就像是

void func (DOMElement& e, ...) {
}

我想从核心转储中检查这个 DOMElement(如打印出它的名称、标签、子元素等。基本上遍历这个 DOMElement 下面的 DOMDocument)但我不熟悉 xerces-c 代码库。

知道我该怎么做吗?

附加信息:- 我正在使用 gdb。

4

1 回答 1

1

如果您使用的是 gdb,我假设您使用的是 linux,对吗?然后你应该安装libexerces-c++-dev(或libexerces-c++-devel取决于你的发行版)包和源代码。这将允许您甚至在 xerces 代码中设置断点。

过去我一直在使用 xerces,当它通常崩溃时,问题不在于库本身,而在于“调用者”。在您的情况下,我将使用外部库创建一个非常简单的项目,并尝试解析一个简单的已知可工作的 XML 文件,因为即使您可以找到崩溃指令,我怀疑它是否会有所帮助,因为使用了 xerces不是直接由您而是由另一个图书馆

于 2012-05-10T16:56:51.290 回答