Почему Eclipse CDT игнорирует контрольные точки? - PullRequest
25 голосов
/ 15 октября 2008

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

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

РЕДАКТИРОВАТЬ: Да, конечно, компилируется с отладочной информацией. Это происходит только в некоторых классах или точках в коде. И я почти уверен, что эта часть кода достигнута, потому что я могу достичь ее, шагнув

РЕДАКТИРОВАТЬ: решение от Ричарда не работает; Спасибо, в любом случае. Я собираю в Debug, без какой-либо оптимизации.

Ответы [ 11 ]

15 голосов
/ 22 мая 2009

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

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

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

10 голосов
/ 15 августа 2012

Я обнаружил, что иногда переключение упомянутого средства запуска процессов с «GDB (DSF) Create Process Launcher» на «Standard Create Process Launcher» исправило эту проблему для меня. В других случаях достаточно просто удалить все точки останова и перезапустить Eclipse.

3 голосов
/ 09 сентября 2011

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

3 голосов
/ 06 декабря 2008

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

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

Если это так, вы, вероятно, видите эту исправленную ошибку GCC .

0 голосов
/ 10 мая 2016

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

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

или перейдите в раздел «Отладка конфигурации» (оно находится в меню, которое открывается, когда вы нажимаете на маленькую стрелку рядом со значком ошибки). Выберите проект, который вы отлаживаете, и нажмите на вкладку отладчика. Проверьте, используете ли вы gdb, и добавьте сюда флаги.

0 голосов
/ 10 ноября 2014

У меня была такая же проблема,

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

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

0 голосов
/ 30 мая 2014

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

Silviu

0 голосов
/ 21 октября 2013

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

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

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

0 голосов
/ 08 августа 2013

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

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

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

0 голосов
/ 31 мая 2012

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

...