Как я отлаживаю C++ 0x программы в MacPorts gcc 4.5?

У меня есть простая программа C++, которую я пытаюсь отладить, но gdb не может найти объектный файл для библиотек (или никакая информация об отладке не доступна), и это не кажется способным для нахождения отладочных символов для моего исполняемого файла также.

Я нахожусь на OSX 10.5.8 с macports, и я компилирую свой код с

g ++-mp-4.5 - Стена - педантичный-std=c ++ 0x-g-ggdb-I/opt/local/include-L/opt/local/lib-lgsl - статичный-libstdc ++ MCMC-simplex.cpp-o mcmc

(существует только один файл, и g ++-mp-4.5 является macports исполняемым файлом для gcc/g ++ 4.5),

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

предупреждение: не Мог найти объектный файл "/opt/local/var/macports/build / _ opt_local_var_macports_sources_rsync.macports.org_release_ports_lang_gcc45/work/build/i386-apple-darwin9/libgcc/trunctfdf2_s.o" - никакая отладочная информация доступный для "../../../gcc-4.5.0/libgcc/../gcc/config/soft-fp/trunctfdf2.c".

чтобы мне указывает, что macports имеет ошибку во время своей сборки (кажется, что gdb ищет объектные файлы во временном каталоге сборки).

Я должен добавить, что, когда я пытаюсь видеть, что мои программы перечисляют в gdb (тот, обеспеченный Apple), это пытается искать случайное .s файл в /var/tmp, чтобы мне походит на ассемблерный файл. Именно поэтому я говорю, что это не кажется способным для нахождения отладочных символов для моей программы также.

Когда я пробую MacPorts gdb 7.1, я добираюсь

предупреждение: '/var/folders/Xa/XaqHO9PeEC8K-Nrd0L9xWk +++ TM/-Tmp-//cc2IvFto.o': не может открыться для чтения символов: Никакой такой файл или каталог. (никакая найденная отладочная информация)... сделанный.

и ни одно из многих сообщений об ошибках, что gdb Apple выделяет (хотя конечным результатом является то же).

Кто-либо столкнулся с этой проблемой и предложил решение?

8
задан Marcus P S 28 July 2010 в 20:26
поделиться

1 ответ

В отличие от других UNIXen, в MacOS отладочная информация не связана с исполняемым файлом. Вместо этого, исполняемый файл имеет список объектных файлов, которые были связаны с ним, и отладчик ищет отладочную информацию в этих отдельных объектных файлах.

Если вы удалите объектные файлы, то отладка будет невозможна.

Когда вы компилируете и компонуете исполняемый файл в "один шаг", GCC делает следующее:

  1. Создайте ассемблерный файл /tmp/[random-string].s
  2. Соберите его в /tmp/[random-string]. o
  3. Свяжите /tmp/[random-string].o с crt0.o, libc и т.д. в исполняемый файл mcmc.
  4. Удалите /tmp/[random-string].o и .s

Именно последний шаг мешает отладке.

Решение:

g++-mp-4.5 -Wall -pedantic -std=c++0x -g -ggdb -c MCMC-simplex.cpp
g++-mp-4.5 MCMC-simplex.o -lgsl -static-libstdc++ -o mcmc

Это оставит MCMC-simplex.o в текущем каталоге, и позволит GDB найти в нем отладочную информацию.

11
ответ дан 5 December 2019 в 09:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: