Ошибка «Источник недоступен для main ()» при отладке простого C ++ в Eclipse с помощью gdb - PullRequest
20 голосов
/ 24 февраля 2010

У меня проблемы с отладкой программы на C ++ в Eclipse (последняя версия RC Helios, обновленная самой последней версией CDT) в OSX.

Программа очень проста (по существу, урок 2 из учебных пособий NeHe по OpenGL), состоит из одного файла cpp и, используя каркасы OpenGL и Cocoa, и связывается с libSDL.a и libSDLmain.a.

Структура проекта очень проста: исходные файлы находятся в подкаталоге проекта с именем src /, а исполняемый файл встроен в корневой каталог проекта.

Проблема заключается в том, что всякий раз, когда я пытаюсь добавить точки останова и отладить их, точки останова, кажется, попадают идеально, но источник не отображается - вместо этого я просто получаю ошибку «Нет доступного источника для main ()» в окне кода.

Для флагов компилятора не заданы значения оптимизации, а для компилятора и компоновщика установлен флаг отладочных символов (-g).

Для параметра отладки в Eclipse задано значение "Стандартные процессы порождения", а для отладчика - "gdb".

Теперь самое странное, что если я попытаюсь отладить точно такой же исполняемый файл - т.е. точно такой же, который был построен Eclipse - используя gdb из терминала (оболочки), тогда все работает нормально. Точки останова достигнуты, исходный код отображается без проблем.

Я убедился, что и Eclipse, и оболочка используют один и тот же исполняемый файл GDB, и они (это /usr/bin/gdb).

Теперь я могу ошибаться, но все это наводит меня на мысль, что не может быть проблемы с флагами компилятора и компоновщика (потому что один и тот же исполняемый файл отлаживаем из оболочки), поэтому, вероятно, проблема должна быть в том, как gdb вызывается из Eclipse? Возможно, при запуске из Eclipse GDB собирает другие файлы конфигурации или что-то еще, чем когда он запускается из оболочки? (Кто-нибудь знает?)

Я бы очень признателен за любую помощь с этим, потому что это медленно сводит меня с ума!

Пожалуйста, дайте мне знать, если были бы полезны какие-либо другие детали - точные номера версий Eclipse / cdt / gdb, точные командные строки компоновщика / компилятора и т. Д. - и я с радостью обновлю этот пост вместе с ними.

Заранее большое спасибо,

thoughton.

--- отредактировано @ "14 часов назад" ---

Я попробовал опцию «добавить путь к файловой системе» (с «поиском в подпапках»), но это не сработало. Я также пытался создать новый совершенно плоский проект, но это тоже не сработало. Я даже пытался получить релиз Galileo (eclipse-SDK-3.5.2RC4 с обновлением CDT), но это не имело никакого значения (кроме того, что gdb медленнее запускался).

И вот еще кое-что странное, что я заметил: как только я получаю сообщение «Источник недоступен», если я затем переключаю консоль Eclipse для отображения консоли «gdb», а также включаю «Режим подробной консоли», чтобы я мог сообщить об этом Затем я могу выполнить команды «l» и «bt» и заставить их работать успешно, показывая правильный источник и стек, где была достигнута моя точка останова. Что, поправьте меня, если я ошибаюсь, должно означать, что информация есть и GDB вызывается правильно - так почему Eclipse не увидит эту информацию?

Я близок к тому, чтобы отказаться от «Затмения», если честно ... Я тоже пришел к нему с такими большими надеждами.

Буду очень признателен за любую дополнительную помощь или мысли.

т.

Ответы [ 12 ]

0 голосов
/ 11 сентября 2018

Однажды столкнулся с той же проблемой. Вам просто нужно перейти к свойствам вашего проекта, нажав ALT + ENTR или щелкнув правой кнопкой мыши по проекту и прокрутив вниз, и вы найдете свойства. Разверните сборку C / C ++ слева. Затем нажмите на настройки. После того, как вы откроете настройки, затем нажмите на настройки инструмента. В компиляторе MCU GCC есть опция отладки. Нажмите на отладку и добавьте

-g -O0

в других флагах отладки. Попытка отладки проекта сейчас.

0 голосов
/ 15 мая 2013

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...