2015-04-07 2 views
6

У меня есть проблема, отлаживающая приложение C++ с помощью удаленного сеанса GDB, что кодовая база является большой, и поэтому она содержит (при компиляции с флагами -O2, '-g', '-DNDEBUG') большой файл с отладочной информацией (1,1 Гб).Как GDB имеет дело с большими (> 1 Гб) отладочными файлами?

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

В качестве решения этой проблемы, я выполнить следующие команды после того, как у меня подключен к целевой аудитории:

symbol-file -readnow [path-to-file-with-debugging-info] 

Это расширяет полные таблицы символов. Но в этом случае у GDB просто заканчивается память, ударяющая 13 Гб или даже больше ОЗУ (пока у меня только 16 Гб доступно на моей машине). Эта проблема уже указана в GDB Wiki и известна.

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

Заранее благодарен!

+0

Таблицы с частичными символами - это оптимизация gdb. Если они не работают, то это ошибка gdb, которую вы должны записать. Обычным пользователям никогда не нужно «-readnow» - это скорее опция разработчика gdb и/или обходной путь. –

ответ

0

Поскольку работа с большими отладочными файлами является слабостью GDB, оптимальным способом в этом случае было уменьшение размера файла * .dbg с помощью отладочных символов не для всех модулей приложения, а только для тех, где отладка будет на самом деле происходят.

В этом случае с ~ 150 мб * .dbg-файлом и использованием отладчика DS-5 мне понадобилось только 2,5 ГБ ОЗУ, что приемлемо.

1

Вы можете попробовать использовать золотой линкер с опцией --compress-debug-sections=zlib. Это уменьшит размер информации об отладке. gdb может читать сжатую информацию об отладке с версии 7.0.

+0

Спасибо за этот отзыв, но, к сожалению, мне приходится использовать общую среду сборки, и там не разрешено использовать другой компоновщик/компилятор/etc. –