Моя проблема в том, что я установил несколько точек останова в своем коде, и некоторые из них не работают. Кое-где жалуется на «Неразрешенную точку останова».
Кто-нибудь знает, почему это происходит? Кстати, я использую GDB.
Обновлено: Да, конечно, компилируется с отладочной информацией. Это происходит только в некоторых классах или точках кода. И я почти уверен, что эта часть кода достигнута, потому что я могу дойти до нее, пошагово
Обновлено: решение Ричарда не работает; Спасибо, в любом случае. Я компилирую в Debug без какой-либо оптимизации.
со мной это тоже происходит постоянно; в целом отладчик из Eclipse CDT, к сожалению, очень ненадежный
Проверьте, скомпилирован ли ваш исполняемый файл с отладочной информацией.
Как сказано в вопросе, код скомпилирован с отладочной информацией.

«Неразрешенная точка останова» просто означает, что GDB не нашел местоположение кода, соответствующее файлу и строке, в которых вы пытались установить точку останова.
Вы пытаетесь остановиться в конструкторе?
Если это так, вы, вероятно, видите этот недавно исправленный GCC ошибка.
У меня такая же проблема, не могли бы вы мне помочь?
Может быть, вы пытаетесь установить точки останова в еще не загруженной разделяемой библиотеке. Это не сработает, пока библиотека не загрузится. Более новый gdb позволяет устанавливать отложенные точки останова, но это может (пока) не поддерживаться CDT. Обходной путь - установить точку останова в месте, доступном с самого начала, которое будет достигнуто, когда соответствующая разделяемая библиотека уже загружена. Затем установите другую точку останова в общей библиотеке. Теперь должно работать. Это немного утомительнее, но обычно работает.
Из Документация GDB:
For a pending breakpoint whose address is not yet known, this field will contain 'PENDING'. Such breakpoint won't fire until a shared library that has the symbol or line referred by breakpoint is loaded.
Иногда при оптимизации также пропускаются точки останова. Убедитесь, что вы компилируете с -O0
Я обнаружил, что использование F8 (возобновление) не останавливается на моих точках останова. Но, если у меня есть Stop On Startup: main set, тогда перешагните через мой код (F5 / F6), тогда мои точки останова будут достигнуты. У меня нет никаких специальных параметров компилятора, кроме -g или -g3. Надеюсь, что это поможет ...
Убедитесь, что тип точки останова правильный. Для C / C++ это крошечная синяя точка. Если это похоже на что-то еще, скорее всего, тип точки останова неверен. Я бы попытался закрыть файл, щелкнуть по нему правой кнопкой мыши -> открыть с помощью -> Редактор C / C++. Это сработало для меня.
Я обнаружил, что иногда переключение упомянутой программы запуска процессов с «GDB (DSF) Create Process Launcher» на «Standard Create Process Launcher» решает эту проблему для меня. В других случаях достаточно просто удалить все точки останова и перезапустить Eclipse.
Если другие ответы здесь не решили вашу проблему, возможно, у вас та же проблема, что и у меня (что было результатом устаревшей версии GDB). Вероятно, это относится к любому, кто использует GDB на Mac.
Смотрите мой вопрос и ответ здесь:
GDB не нарушает работу некоторых строк кода при использовании нескольких исходных файлов.
Вы размещаете точку останова в классе / функции шаблона? Я столкнулся с той же проблемой: я могу выполнять код шаблонов, но точки останова не работают. Я предполагаю, что eclipse не понимает, что он должен размещать точки останова во всех экземплярах этого класса:
template <typename T>
int doit(T a) {
return a.do(); // <-- breakpoint here
}
...
A a;
cout << doit(a);
Я думаю, он будет ждать doit (...) и никогда не doit (...). По крайней мере, сам gdb останавливается на точке останова, если я устанавливаю его на функцию: 'doit'.
У меня была аналогичная проблема с GDB. Похоже, что это было вызвано идентичными именами файлов исходного кода, даже если они имеют разные пути. Я переименовал дубликаты, и после этого GDB работал нормально.
Сильвиу
У меня такая же проблема,
1.- Removed the breakpoints.
2.- Restart eclipse
3.- Clean the project by using project -> clean
4.- Add again the breakpoints and start your debugging.
Это решило мою проблему.
У меня тоже была эта проблема, и этого было достаточно, чтобы просто перезапустить eclipse.
ЕСЛИ вы используете GDB в качестве отладчика, убедитесь, что вы используете оба флага: -g и -ggdb
Вы можете либо отредактировать файл make напрямую, либо FCFLAGS = -g -ggdb (могут быть и другие флаги)
или перейдите в «Конфигурация отладки» (она находится в меню, которое выпадает, когда вы щелкаете маленькую стрелку рядом со значком ошибки.) Выберите проект, который вы отлаживаете, и щелкните вкладку отладчика. Убедитесь, что вы используете gdb, и добавьте сюда флаги.
Удивительно, что на этот вопрос так много разных ответов. По-прежнему существует проблема (2020 г.) в Eclipse 2019.12, CDT 9.10, RHEL 8.0, x86_64. В моем случае я могу исправить это, настроив свойства точки останова и изменив его с «обычного» на «аппаратное» (выберите окно точки останова, затем щелкните правой кнопкой мыши точку останова, свойства точки останова, общие, тип).
Вы устанавливаете точки останова на «настоящих» строках кода? Под этим я подразумеваю исполняемый код, а не, скажем, строку, содержащую только скобку.