Eclipse CDT и gdb имеют разные мнения о том, где находятся исходные файлы.

Я сделал следующее:

  1. импортировал проект Makefile в Eclipse CDT.
  2. скомпилировал программу из командной строки, используя параметр -ggdb команды g ++.
  3. запустить программу из командной строки
  4. установить несколько точек останова в Eclipse CDT
  5. подключил отладчик Eclipse CDT (gdb) к дочернему процессу, который порождает моя программа (дочерний процесс запускает программу из того же проекта).

На этом этапе я получаю сообщение об ошибке в консоли

Нет исходного файла с именем /home/oswald/Eclipse/CDT/Workspace/Project/path/to/header.h.

Когда я возобновляю программу, все мои точки останова пропускаются. Как мне заставить работать точки останова?

Некоторые дополнительные примечания:

  • Нет задействованных разделяемых библиотек.
  • Eclipse Indigo, gdb 7.4, Ubuntu 12.04
  • Используя командную строку для присоединения gdb к процессу, я могу установить точку останова на header.h:257 (header.h находится в папке /home/oswald/Eclipse/CDT/Workspace/Project/path/to/). Затем gdb соблюдает эту точку останова.
  • Используя командную строку для присоединения gdb к процессу, я не могу установить точку останова на /home/oswald/Eclipse/CDT/Workspace/Project/path/to/header.h:257, я получаю то же сообщение от gdb, что и при использовании Eclipse CDT.
  • Eclipse CDT использует GDB (DSF) Attach to Process Launcher. При переключении на Стандартное присоединение к средству запуска процессов появляется сообщение об ошибке, что система не может перечислить запущенные процессы.
  • Путь поиска источника в конфигурации отладки установлен по умолчанию (Абсолютный путь к файлу, Реальный путь к файлу программы, Проект). Я экспериментировал с другими настройками, но ни один из них не работал.

person Oswald    schedule 26.11.2012    source источник


Ответы (1)


В качестве обходного пути я написал сценарий оболочки, который генерирует файл .gdbinit, содержащий соответствующие записи каталога:

#!/bin/sh

PROJECT=/home/oswald/Eclipse/CDT/Workspace/Project

find $PROJECT -name "*.h*" -o -name "*.c*" \
  | sed 's:/[^/]*$::' \
  | sort \
  | uniq \
  | sed 's/^/directory /' > $PROJECT/.gdbinit

и настроил Eclipse CDT для использования этого файла .gdbinit.

person Oswald    schedule 26.11.2012
comment
Не уверен, что это вообще полезно для кого-то, но я смог использовать это, чтобы сделать то же самое, за исключением немного более сложного. Мне нужно было исключить кучу бесполезных папок svn и CMake и включить только исходные файлы в два конкретных проекта в моей рабочей области. Вот мой файл: find $PROJECT \! \( -type d \( -path "*svn*" -o -path "*CMake*" -o -path "*.dir" \) -prune \) -type f \( -path "*/Ae9Ap9Mpi/*" -o -path "*/SpWx/*" \) \( -name "*.h*" -o -name "*.c*" \) \ | sed 's:/[^/]*$::' \ | sort \ | uniq \ | sed 's/^/directory /' > $PROJECT/.gdbinit - person xjsc16x; 25.04.2018