У меня есть простая программа 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 выделяет (хотя конечным результатом является то же).
Кто-либо столкнулся с этой проблемой и предложил решение?
В отличие от других UNIXen, в MacOS отладочная информация не связана с исполняемым файлом. Вместо этого, исполняемый файл имеет список объектных файлов, которые были связаны с ним, и отладчик ищет отладочную информацию в этих отдельных объектных файлах.
Если вы удалите объектные файлы, то отладка будет невозможна.
Когда вы компилируете и компонуете исполняемый файл в "один шаг", GCC делает следующее:
/tmp/[random-string].s
/tmp/[random-string]. o
/tmp/[random-string].o
с crt0.o
, libc
и т.д. в исполняемый файл mcmc
. /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 найти в нем отладочную информацию.