GDB не может установить точку останова - PullRequest
0 голосов
/ 14 февраля 2011

Я использую g ++ 4.1.2 и gdb 7.2

Я отлаживаю код, использующий Xerces, который я построил с использованием тех же инструментов, хотя предположительно без отладки.

GDB проходит через мой код просто отлично, но, конечно, НЕ проходит через Xerces, потому что он, вероятно, не имеет отладочной информации и определенно не знает, где находится исходный каталог. Но все, что я хочу, это установить точку останова, когда Xerces (анализатор обратного вызова) вызывает объект обратного вызова.

Их базовый класс - DefaultHandler

У меня есть класс ContentHandlerBase: public DefaultHandler Затем листовые классы наследуются от ContentHandlerBase. Эти листовые классы находятся внутри пространства имен A, например

в GDB я пытаюсь установить точку останова.

b A :: LeafContentHandler :: LeafContentHandler b A :: LeafContentHandler :: endElement

Первая точка останова работает, потому что код встроенный (определен в заголовке).

Вторая точка останова не работает, а это означает, что GDB утверждает, что такого символа не существует, хотя, очевидно, он существует. Это виртуальная функция, определенная в библиотеке Xerces, если это имеет значение. До того, как я перекомпилировал Xerces, он был собран с g ++ 3.4.6, и я не смог найти символ в gdb. Теперь GDB находит символ (я могу нажать на вкладку), но затем он говорит, что он не существует, если я дождусь загрузки библиотеки.

Может кто-нибудь сказать мне, что я должен сделать, чтобы это работало? Я бы предпочел не собирать все xerces с помощью отладки.

Обратите внимание, что в некоторых случаях при использовании конструктора в файле .cpp он также работал по какой-то причине, а затем, поскольку он находился в том же файле, я мог установить следующую точку останова для белья, и это сработало.

1 Ответ

1 голос
/ 15 февраля 2011

Попробуйте GDB 7.1 - кажется, есть некоторые проблемы в установке точки останова по имени функции в GDB 7.2

...