2011-12-15 2 views
9

У меня есть общий вопрос gdb/gdbserver. Я пытаюсь отладить встроенное приложение arm linux с помощью gdb на хосте и gdbserver на удаленной цели. Я могу перейти через строки кода в начале основного. Однако gdb (или gdbserver), кажется, теряется после вызовов функций разделяемой библиотеки. Даже когда я устанавливаю точку останова после вызова и продолжаю использовать, он никогда не попадает в точку останова. Я знаю, что у меня нет символов в разделяемых библиотеках, и я действительно не хочу вступать в них. Не следует ли мне успешно переходить через вызовы библиотеки в gdb даже без символов, находящихся в разделяемых библиотеках, или, по крайней мере, продолжать следующую точку останова? Или это указывает на другой тип проблемы?Выполнение вызовов библиотеки с помощью gdb/gdbserver

+0

У вас есть доказательства из другого источника, который указывает, что он выполняет инструкции (ы) в контрольной точке? Вместо того, чтобы просматривать источник высокого уровня, посмотрите на разборку, чтобы увидеть прошлую интерпретацию 'gdb'. –

+0

Возникает ли проблема с одним конкретным общим объектом или вы можете создать тривиальный «тестовый пример», который иллюстрирует проблему? –

+0

Извините за длительное время отклика. Код работает правильно на встроенном устройстве. Это просто gdb или gdbserver, которые теряются. После вызова функции библиотеки она теряет следы своего места в программе и никогда не сможет восстановить контроль. Я не думаю, что это обязательно все функции библиотеки, так как она попадает на один, open(), что она не может пройти раньше на этапе выполнения. – Jim

ответ

1

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

Попробуйте это:

 
(gdb) x/i my_func 
0x12345678 <my_func> ... 
(gdb) break *0x12345678