К сожалению, я столкнулся с проблемой, когда задержка, вызванная автоматической загрузкой общих объектов, доставляет мне неприятности. Последовательность выглядит следующим образом:
- Приложение работает в цикле ожидания.
- Я запускаю gdbserver --attach< /code> в удаленной системе.
- Я запускаю gdb и назначаю удаленный на машине сборки.
- прикрепляет и извлекает все загруженные в данный момент общие объекты и их символы отладки из удаленной системы. (Отлично!)
Код: Выделить всё
gdb - Я устанавливаю точку останова и запускаю продолжение.
- Я запускаю событие, которое должно привести приложение к достижению точка останова.
- Приложение динамически загружает несколько дополнительных общих объектов (в данном случае для PAM, хотя это не имеет отношения к коду, который я пытаюсь отлаживать).
- 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
Мобильная версия