GDB становится медленнее со временем - PullRequest
4 голосов
/ 13 декабря 2011

При отладке с помощью GDB во время одного сеанса отладки она становится все медленнее и медленнее с течением времени. Даже самые простые операции, такие как «шаг за шагом», могут занимать десятки секунд, а иногда даже минут.

Я отлаживал довольно большой проект (браузер Chromium). Единственная причина, по которой я мог придумать, заключалась в том, что GDB становится медленнее со временем, потому что он загружает все больше и больше символов и требует больше времени для работы с ними. Однако Chromium компилирует весь код в один огромный исполняемый файл, который содержит все символы, которые должны быть загружены в самом начале. Таким образом, база данных символов не будет расти во время отладки. Более того, зачем искать символы просто для того, чтобы выполнить переход или перейти к работе?

Во время тестирования я пытался использовать gdb с внешними интерфейсами (Eclipse, QtCreator, Emacs) и из командной строки, чтобы подтвердить, что это не проблема IDE. Оба варианта использования демонстрируют одну и ту же проблему, однако кажется, что она начинает появляться раньше в IDE (возможно, потому что IDE также загружает символы для представления просмотра, стека вызовов, списка потоков и т. Д.).

Почему ГБД замедляется? Это ошибка дизайна, ошибка или какая-то конкретная проблема на моем компьютере? Есть ли бесплатные альтернативы GDB, которые работают быстрее?

1 Ответ

3 голосов
/ 13 декабря 2011

Почему GDB работает медленнее?

Это ошибка.Попробуйте новую версию GDB (желательно текущий снимок CVS).Если проблема все еще существует, сообщите об этом GDB bugzilla с инструкциями по воспроизведению.

все символы, которые должны быть загружены в самом начале.

GDB загружает частичные символы (psymbols) при запуске и читает больше «по требованию», поэтому ожидается некоторый рост.

почему нужно искать символы просто для того, чтобы выполнить шагили войдите в

Чтобы перейти или войти, GDB, вероятно, потребуются таблицы строк для текущей единицы перевода (TU).Если ваша операция «шаг в» приводит вас к новому TU, то должны быть загружены новые таблицы строк.

Тем не менее, не должен переводить GDB где-то в минутах от stepили next.

...