Запрограммированный сигнал 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 В, вы получаете такую же проблему после подключения к источнику питания.
В этом случае вам необходимо отключить все источники питания и снова подключиться с правильным уровнем напряжения. Тогда проблема с отладкой уходит.