如何从核心转储遍历 xerces-c DOMDocument

How do I traverse a xerces-c DOMDocument from a core-dump?

本文关键字:遍历 xerces-c DOMDocument 转储 核心      更新时间:2023-10-16

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

我有一个使用 xerces-c 和段错误(在此过程中创建核心转储(的程序。我想做的是启动 gdb 并从核心转储遍历创建的 DOMDocument。

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

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

原始问题:-

我正在使用一个第三方库,该库反过来使用 xercesc 在段错误的地方进行 xml 解析。如何检查核心转储中的 xerces-c 元素?

我可以访问库源代码,并且在使用 DOMElement 引用作为函数参数的函数中存在段错误。类似的东西

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

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

知道我该怎么做吗?

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

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

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