2012-05-10 5 views
0

Я отправляю отредактированный вопрос, так как весь бизнес segfaults и сторонних библиотек в исходном вопросе просто отвлекает.Как мне пересечь DOMDocument xerces-c из ядра-дампа?

У меня есть программа, которая использует xerces-c и segfaults (создавая ядро-дамп в процессе). Я хочу сделать это, чтобы запустить gdb и пересечь созданный DOMDocument с ядро-дампа.

например, я хочу получить атрибуты данного DOMElement или его дочерних узлов и так далее. У кого-нибудь есть статьи, которые я могу прочитать для этого, которые описывают внутреннюю структуру DOMElements и т. Д.? Или даже указать мне некоторые ресурсы на исходный код xerces-c, так как я не смог найти исходный код для DOMElement в исходном tarball. (Имея исходный код, возможно, с тех пор я точно знаю, как реализуется DOMElement, позволяя мне пройти его).

Как я уже сказал, я не слишком хорошо знаком с кодовой базой xerces-c, а документация apache явно ужасна.

Оригинальный вопрос: -

Я использую библиотеку третьей стороной, которая в свою очередь, использует xercesc для XML разбора где-нибудь, который segfaulting. Как проверить элементы xerces-c из ядра-дампа?

У меня есть доступ к исходному коду библиотеки, и это segfaulting в функции, которая использует ссылку DOMElement в качестве аргумента функции. Что-то вроде

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

Я хочу, чтобы проверить этот DOMElement из дампа памяти (как в распечатке это название, теги, дочерние элементы и так далее. В основном пересекают DOMDocument ниже этого DOMElement), но я не знаком с кодовой базой xerces-c.

Любая идея о том, как я могу это сделать?

Дополнительная информация: - Я использую gdb.

+2

sacrifice seven chicken – PlasmaHH

ответ

1

Если вы используете gdb, я предполагаю, что вы используете Linux, верно? Затем вы должны установить пакет libexerces-c++-dev (или libexerces-c++-devel в зависимости от вашего распространения) и исходный код. Это позволит вам даже установить точки останова в коде xerces.

В прошлом я часто использовал xerces, и когда он падает, обычно проблема не в самой библиотеке, а в «вызывающем». В вашем случае я бы создал очень простой проект, используя внешнюю библиотеку, и попытаюсь проанализировать простой XML-файл, который можно использовать в рабочем состоянии, потому что даже если вы можете найти инструкции по сбою, я сомневаюсь, что это поможет, учитывая, что xerces используется не напрямую вами, а другой библиотекой

+0

Я скомпилировал xerces-c из исходного кода, так как мне повезло, что пакеты libxerces-C++-dev не содержат полную информацию об отладочной информации. В любом случае, я уверен, что проблема не в xerces-c, а в библиотеке, поэтому я просто хочу проверить, что библиотека создает и передает «правильные» узлы DOMElement. Запуск DOMPrint в XML-файле работает отлично, поэтому проблема не существует. Написание небольшого тестового exec также отлично работает. Segfault определенно находится во внешней библиотеке, поэтому я не беспокоюсь о xercesc. – owagh

+0

Вы пробовали написать небольшой тестовый exec, который использует внешнюю библиотеку? Это было то, что я имел в виду в своем ответе: маленький тест предназначался для внешней библиотеки, а не для «ксерок». Я обновлю свой ответ, чтобы удалить двусмысленность – Emiliano

+0

Я понял, что вы имели в виду это ... И да, небольшой тестовый exec, похоже, работает нормально. Я не смог воссоздать его в минимальном исполняемом файле.В любом случае, я исправил segfaults, но мой вопрос по-прежнему остается без ответа. Как мы перемещаем DOMDocument xerces-c во время отладки. Я обновлю вопрос, чтобы сделать его более общим, поскольку весь бизнес сторонней библиотеки и segfaults просто отвлекает от основной точки вопроса. – owagh