У меня есть программа, которая зависит от внешней общей библиотеки, но после выполнения функции внутри библиотеки я теряю возможность использовать точки останова.
Я могу ломаться и шагать, как обычно, до тех пор, пока не выполню эту функцию, но после того, как она закончится, она никогда не сломается.Он даже не сломается на главном, если я попытаюсь использовать start
во второй раз, выполняя программу.Это не проблема встроенных функций, потому что я ломал эти функции раньше, и когда я закомментировал эту функцию, все снова начало работать.
Кто-нибудь когда-нибудь сталкивался с чем-то подобным раньше?Что я могу сделать?
Использование gdb 7.1 с gcc 3.2.3
Редактировать: После некоторых подсказок от пользователей я понял, что процесс разветвляется внутри библиотечного вызова.Я не уверен, что он делает (и мне действительно все равно).Можно ли как-то это компенсировать?Я экспериментировал с режимом follow-fork как дочерним, но я действительно запутался, что происходит, когда он разветвляется, и я не могу понять, как продолжить выполнение или сделать что-нибудь полезное.
Редактировать: дальнейшее расследование.Самое близкое, что я могу сказать, это то, что GDB теряет всю информацию о своих символах.После 2-го запуска все символы преобразуются в адрес @plt, а не в фактический адрес, который они разрешали при первом запуске.Как будто вторая загрузка процесса теряет всю информацию, полученную в первый раз, и отказывается перезагружать его.Я так растерялся !!
Редактировать: Итак, я проследил проблему до vfork вызова с открытым доступом.Видимо GDB не очень хорошо с popen?Как только я отсоединяюсь от процесса popen'd vforked, я теряю все свои символы.Я также прочитал некоторые отчеты онлайн об этом. Есть ли надежда ?