gdbserver не работает правильно (кора головного мозга a9) в Eclipse

gdb, кажется, переходит в плохое состояние после попытки пройти одну или две строки после достижения точки останова. Есть ли что-то конкретное, что я могу сделать в Eclipse, чтобы исправить это?

Репро:

  1. Запустите сеанс отладки в Eclipse, прикрепленный к удаленной цели
  2. Установите точку останова в Eclipse, затем активируйте ее на цели.
  3. Точка останова корректно попадает в Eclipse. Теперь «перешагните» линию или две.

Ожидаемый результат:

  • 'step over' выполнит одну строку, как вы обычно ожидаете.

Фактический результат:

  1. Вместо перехода к следующему номеру строки программа «продолжается». В представлении отладки в Eclipse дерево, отображающее все потоки, минимизирует их все, и их нельзя развернуть, чтобы показать текущий стек. Также кнопки "шаг..." больше не активны, а кнопки "пауза" и "стоп" можно нажимать. Это означает, что программа запущена, чего не ожидается, поскольку ранее мы нажали «перешагнуть». Глядя на цель, она не работает, а все еще стоит на паузе.
  2. Если мы нажмем «пауза» в Eclipse, а затем откроем конкретный поток с точкой останова, мы увидим, что указатель инструкции вернулся в правильное место, которое мы ожидаем, после нажатия «перешагнуть» ранее. Итак, на первый взгляд кажется, что у нас просто есть сбой в нашем рабочем процессе, и нам нужно только нажать «пауза» и найти наш предыдущий поток всякий раз, когда пошаговое выполнение ведет себя неправильно. Но вскоре все просто перестает работать...

Я смог воспроизвести эту проблему без Eclipse, просто используя командную строку gdb и удаленный gdbserver. Такое же поведение происходит. Существует хакерский потенциальный обходной путь: как только вы нажмете точку останова, «включите блокировку планировщика». После этого вы можете шагнуть в свое удовольствие. Но я плохо понимаю, что это делает.

У кого-нибудь есть какие-либо данные?

Спасибо.


person patrick    schedule 07.11.2016    source источник


Ответы (1)


После подключения к устройству в консоли Eclipse GDB введите:

установить шаг блокировки планировщика

Это клиентская команда gdb, которую пользовательский интерфейс Eclipse не поддерживает напрямую, поэтому вам придется вводить ее вручную. Вы также можете добавить его в качестве привязки к другой команде, которую Eclipse вызывает в процессе установки, чтобы вам не пришлось вводить ее вручную. Предостережение в том, что его нужно вызывать ПОСЛЕ того, как устройство подключено. Таким образом, вы не можете просто вызвать эту команду прямо в вашем файле gdbinit, это должен быть хук (если вы пытаетесь автоматизировать этот шаг, вместо того, чтобы вводить команду непосредственно в консоли).

person patrick    schedule 09.11.2016