gdb, кажется, переходит в плохое состояние после попытки пройти одну или две строки после достижения точки останова. Есть ли что-то конкретное, что я могу сделать в Eclipse, чтобы исправить это?
Репро:
- Запустите сеанс отладки в Eclipse, прикрепленный к удаленной цели
- Установите точку останова в Eclipse, затем активируйте ее на цели.
- Точка останова корректно попадает в Eclipse. Теперь «перешагните» линию или две.
Ожидаемый результат:
- 'step over' выполнит одну строку, как вы обычно ожидаете.
Фактический результат:
- Вместо перехода к следующему номеру строки программа «продолжается». В представлении отладки в Eclipse дерево, отображающее все потоки, минимизирует их все, и их нельзя развернуть, чтобы показать текущий стек. Также кнопки "шаг..." больше не активны, а кнопки "пауза" и "стоп" можно нажимать. Это означает, что программа запущена, чего не ожидается, поскольку ранее мы нажали «перешагнуть». Глядя на цель, она не работает, а все еще стоит на паузе.
- Если мы нажмем «пауза» в Eclipse, а затем откроем конкретный поток с точкой останова, мы увидим, что указатель инструкции вернулся в правильное место, которое мы ожидаем, после нажатия «перешагнуть» ранее. Итак, на первый взгляд кажется, что у нас просто есть сбой в нашем рабочем процессе, и нам нужно только нажать «пауза» и найти наш предыдущий поток всякий раз, когда пошаговое выполнение ведет себя неправильно. Но вскоре все просто перестает работать...
Я смог воспроизвести эту проблему без Eclipse, просто используя командную строку gdb и удаленный gdbserver. Такое же поведение происходит. Существует хакерский потенциальный обходной путь: как только вы нажмете точку останова, «включите блокировку планировщика». После этого вы можете шагнуть в свое удовольствие. Но я плохо понимаю, что это делает.
У кого-нибудь есть какие-либо данные?
Спасибо.