Запрограммированный сигнал SIGTRAP, Trace/trappoint trap

Я отлаживаю часть (встроенного) программного обеспечения. Я установил точку останова на функцию, и по какой-то причине, как только я достиг этой точки останова, и continue, я всегда возвращаюсь к функции (которая является функцией инициализации, которую следует вызывать только один раз). Когда я удаляю точку останова и continue, GDB говорит мне:

Program received signal SIGTRAP, Trace/breakpoint trap.

Поскольку я работал с точками останова, я предполагаю, что я попал в "ловушку прерывания". Что такое ловушка точки прерывания?

Ответ 1

Ловушка точки останова означает, что процессор попал в точку останова. Есть две возможности, почему это происходит. Скорее всего, ваш код инициализации попадает, потому что ваш CPU снова перезагружается и снова ударяет точку останова. Другая возможность заключается в том, что код, в котором вы устанавливаете точку останова, фактически выполняется в местах, отличных от инициализации. Иногда с агрессивной оптимизацией компилятора может быть сложно точно указать, к какому коду относится ваша точка останова, и какие пути выполнения могут туда добраться.

Ответ 2

Другая возможность, о которой я могу думать, - это:

1. Ваш процесс работает более одного потока.

Для eg - 2 говорят x и y.

2. Нить y попадает в точку останова, но у вас есть прикрепленный gdb к потоку x.

Этот случай является ловушкой Trace/breakpoint.

Ответ 3

У меня возникла проблема с запуском linux-проекта в Visual Studio 2015 и удаленной отладкой. Мое решение project_properties → Свойства конфигурации → Отладка → Режим отладки и изменение значения с "gdbserver" на "gdb"

Ответ 4

Если вы используете V BAT в качестве резервного источника питания, а ваши резервные напряжения ниже 1,65 В, вы получаете такую ​​же проблему после подключения к источнику питания.

В этом случае вам необходимо отключить все источники питания и снова подключиться с правильным уровнем напряжения. Тогда проблема с отладкой уходит.