Подтвердить что ты не робот

Почему Eclipse CDT игнорирует контрольные точки?

Моя проблема в том, что я установил некоторые точки останова в моем коде, а некоторые из них не работают. В некоторых местах он жалуется на "Неурегулированную точку останова".

Кто-нибудь знает, почему это происходит? Кстати, я использую gdb.

EDIT: Да, конечно, скомпилировано с отладочной информацией. Это происходит только в некоторых классах или точках кода. И я уверен, что эта часть кода достигнута, потому что я могу достичь ее stepping

EDIT: решение от Ричарда не работает; Спасибо, в любом случае. Я компилирую в Debug без оптимизации.

4b9b3361

Ответ 1

Может быть, вы пытаетесь установить точки останова в общей библиотеке, которая еще не загружена. Это не сработает, пока библиотека не загрузится. Новые gdb позволяют устанавливать отложенные точки останова, но это может не поддерживаться CDT. Обходной путь заключается в том, чтобы установить точку останова в месте, которое доступно с самого начала, которое будет достигнуто, когда уже упомянутая общая библиотека уже загружена. Затем установите другую точку останова в общей библиотеке. Теперь это должно сработать. Это немного утомительно, но обычно работает.

Из Документация GDB:

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

Ответ 2

Я обнаружил, что иногда переключение упомянутой Process Launcher из "GDB (Создание процесса запуска)" в "Стандартный запуск процесса запуска" устраняет эту проблему для меня. В других случаях просто удаление всех точек останова и перезапуск Eclipse делает трюк.

Ответ 3

"Неразрешенная точка останова" означает, что GDB не нашел местоположение кода, соответствующее файлу и строке, на которой вы пытались установить точку останова.

Вы пытаетесь остановиться в конструкторе?

Если это так, вы, вероятно, увидите этот центрированный фиксированный GCC bug.

Ответ 4

Иногда оптимизация также приводит к пропущению контрольных точек. Убедитесь, что вы компилируете с -O0

Ответ 5

Я обнаружил, что использование F8 (резюме) не останавливается на моих контрольных точках. Но если у меня есть Stop On Startup: основной набор, то затем перейдите по моему коду (F5/F6), тогда мои точки останова будут удалены. У меня нет специальных параметров компилятора, кроме -g или -g3. Надеюсь, что поможет...

Ответ 6

Убедитесь, что тип точки останова верен. Для C/С++ это крошечная голубая точка. Если это похоже на что-то еще, вероятность того, что тип точки останова неверен. Я попытался бы закрыть файл, щелкнуть правой кнопкой мыши по нему → открыть с помощью → Редактор C/С++. Это сработало для меня.

Ответ 7

Если другие ответы здесь не помогли решить вашу проблему, возможно, у вас есть та же самая проблема, которая у меня была (что было связано с устаревшей версией GDB). Вероятно, это случай для тех, кто использует GDB на Mac.

См. мой вопрос и ответ здесь:

GDB не разбивает некоторые строки кода при использовании нескольких исходных файлов

Ответ 8

Вы помещаете точку останова в класс/функцию шаблона? Я столкнулся с одной и той же проблемой: я могу выполнить код шаблонов, но точки останова не работают. Я думаю, что eclipse не понимает, что он должен размещать точки останова во всех экземплярах этого класса:

template <typename T>
int doit(T a) {
 return a.do(); // <-- breakpoint here
}
...
A a;
cout << doit(a);

Я думаю, что он будет ждать doit (...) и никогда не будет doit (...). В режиме аренды gdb сам останавливается на точке останова, если я устанавливаю его в функцию: "doit".

Ответ 9

У меня была аналогичная проблема с GDB. Похоже, что это было вызвано идентичными именами файлов исходного кода, даже если они имеют разные пути. Я переименовал дубликаты, и GDB отлично справился после этого.

Силвиу

Ответ 10

i имела ту же проблему,

1.- Removed the breakpoints. 
2.- Restart eclipse 
3.- Clean the project by using project -> clean 
4.- Add again the breakpoints and start your debugging.

Это решило мою проблему.

Ответ 11

ЕСЛИ вы используете GDB в качестве отладчика, убедитесь, что вы используете оба флага: -g и -ggdb

Вы можете либо отредактировать файл make напрямую, FCFLAGS = -g -ggdb (некоторые другие флаги, которые у вас есть)

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