Удаленная отладка GDB: отложить загрузку библиотек общих объектов .so до перерываC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Удаленная отладка GDB: отложить загрузку библиотек общих объектов .so до перерыва

Сообщение Anonymous »

Я пытаюсь отладить удаленное приложение с помощью gdbserver. У GDB есть функция загрузки общих библиотек, используемых приложением (и их символов отладки) из целевой системы, что обычно очень удобно.
К сожалению, я столкнулся с проблемой, когда задержка, вызванная автоматической загрузкой общих объектов, доставляет мне неприятности. Последовательность выглядит следующим образом:
  • Приложение работает в цикле ожидания.
  • Я запускаю gdbserver --attach< /code> в удаленной системе.
  • Я запускаю gdb и назначаю удаленный на машине сборки.
  • прикрепляет и извлекает все загруженные в данный момент общие объекты и их символы отладки из удаленной системы. (Отлично!)
  • Я устанавливаю точку останова и запускаю продолжение.
  • Я запускаю событие, которое должно привести приложение к достижению точка останова.
  • Приложение динамически загружает несколько дополнительных общих объектов (в данном случае для PAM, хотя это не имеет отношения к коду, который я пытаюсь отлаживать).
  • GDB немедленно извлекает новые общие объекты и символы отладки, по-видимому, приостанавливая выполнение на время он так и делает.
  • Задержка вызывает тайм-аут в коде, и в результате точка останова никогда не достигается.
Я хочу указать GDB, чтобы приложение выполнялось до точки останова без остановки и не пыталось загружать какие-либо дополнительные общие объекты по пути.
Чтение документации , я думал, что смогу запустить set auto-solib-add off в GDB перед подключением к удаленной цели отладки, а затем загрузите их позже (при необходимости) с помощью общей библиотеки. К сожалению, этого кажется недостаточным: хотя этот параметр и заставляет GDB воздерживаться от выборки разделенных символов отладки, он все равно будет извлекать все загруженные файлы *.so, что приводит к той же проблеме.< /p>
Есть ли способ вообще запретить GDB извлекать файлы общих объектов до тех пор, пока они не будут запрошены? (За возможным исключением libpthread.so.0, libc.so.6 и ld-linux-x86-64.so.2, которые, как я понимаю, могут быть необходимы для GDB для правильной интерпретации обратных трассировок.)
В настоящее время я работаю над решением этой проблемы, изменяя код для вызова SIGSTOP в начале раздела, который я хочу отладить, запуская его без отладчика до тех пор, пока оно останавливается, и затем подключите удаленный отладчик. Это работает, но немного раздражает.
Примечание: я знаю, что теоретически возможно клонировать файловую систему цели локально и передать ее в GDB с помощью set sysroot для более быстрого символа. загрузки, но в данном случае это было бы очень неудобно.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ntil-break
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»