Трассировка стека отладчика GCC отображает неверное имя файла и номер строки - PullRequest
3 голосов
/ 27 февраля 2009

Я пытаюсь перенести довольно большой проект C ++ на использование g ++ 4.0 на Mac OS X. Мой проект компилируется без ошибок, но я не могу заставить GDB работать должным образом. Когда я смотрю на стек, набирая «bt» в командной строке GDB, все отображаемые имена файлов и номера строк неверны.

Например, согласно трассировке стека GDB, моя функция main() должна быть в stdexcept от Mac OS X SDK, что не имеет никакого смысла.

Что может привести к неправильной работе GDB? Я уже проверил в своем коде операторы #line и #file и убедился, что в коде есть только окончания строк Unix. Я также очистил и перестроил проект. Я также попытался отладить проект Hello World, и у него не было такой же проблемы.

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

Вот два примерных вызова gcc и ld, выполненных Xcode . AFAIK все cpp-файлы в моем проекте скомпилированы и связаны с одинаковыми параметрами.

/ Разработчик / usr / bin / gcc-4.0 -x c ++ -arch i386 -fmessage-length = 0 -pipe -Wno-trigraphs -fpascal-strings -fasm-blocks -O0 -fpermissive -Wreturn-type -Wunused-variable -DNO_BASS_SOUND -D_DEBUG -DXCODE -D__WXMAC__ -isysroot / Developer / SDK MacOSX10.5.sdk -mfix-and-continue -fvisibility-inlines-hidden -mmacosx-version-min = 10.4 -gdwarf-2 -D_FILE_OFFSET_BITS = 64 -D_LARGE_FILES -D__WXDEBUG__ -D__WXMAC__ -c "/ Пользователи / adriangrigore / Documents / Gemswe Mac / TSDLGameBase.cpp "-o «/ Users / adriangrigore / Документы / Gemsweeper Mac / сборки / Gemsweeper Mac.build/Debug/Gemsweeper Mac.build/Objects-normal/i386/TSDLGameBase.o"

/ Разработчик / usr / bin / g ++ - 4.0 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk «-L / Пользователи / adriangrigore / Документы / Gemsweeper Mac / сборки / отладки» -L / Разработчик / SDKs / MacOSX10.5.sdk / USR / местные / Библиотека -L / opt / local / lib "-F / Пользователи / adriangrigore / Документы / Gemsweeper Mac / сборки / отладки» -F / Пользователи / adriangrigore / Library / Frameworks -F / Разработчик / SDKs / MacOSX10.5.sdk / Library / Frameworks -файллист "/ Пользователи / adriangrigore / Документы / Gemsweeper Mac / сборки / Gemsweeper Mac.build/Debug/Gemsweeper Mac.build/Objects-normal/i386/Gemsweeper Mac.LinkFileList» -mmacosx-version-min = 10,4 /opt/local/lib/libboost_program_options-mt.a /opt/local/lib/libboost_filesystem-mt.a /opt/local/lib/libboost_serialization-mt.a /opt/local/lib/libboost_system-mt.a /opt/local/lib/libboost_thread-mt.a «/ Users / adriangrigore / Документы / Gemsweeper Mac / третий партия / FreeImage / Dist / libfreeimage.a» «/ Users / adriangrigore / Документы / Gemsweeper Mac / третий партия / CPUInfo-1,0 / libcpuinfo.a» -L / usr / local / lib -framework IOKit -framework Углерод -рамник Какао -рамка -рамка QuickTime -рамка OpenGL -фреймворк AGL -lwx_macd_richtext-2.8 -lwx_macd_aui-2.8 -lwx-2.x-x_x_x8 lwx_macd_adv-2.8 -lwx_macd_core-2.8 -lwx_base_carbond_xml-2.8 -lwx_base_carbond_net-2.8 -lwx_base_carbond-2.8 -framework SDL -рамка Cocoa -o "/ Пользователи / рекламные объявления Mac / сборки / Debug / Gemsweeper Mac.app/Contents/MacOS/Gemsweeper Mac "

Обратите внимание, что я уже задавал похожий вопрос относительно отладчика Xcode здесь , но я делаю репост, поскольку только что узнал, что это на самом деле не ошибка Xcode, а проблема с GCC / ld / GDB.

Редактировать: В моем проекте используются следующие сторонние библиотеки: SDL , Boost , wxWidgets . Я не уверен, имеет ли это значение для этой проблемы, но я просто хотел упомянуть об этом на всякий случай.

Я пытался скомпилировать шаблон проекта Xcode SDL и не столкнулся с той же проблемой, поэтому это должно быть связано с чем-то особенным в моем проекте.

Второе редактирование : Как я только что узнал, я сделал ошибку при поиске файлов со строкой «Это автоматически сгенерировано». Я только что нашел несколько десятков файлов с одинаковой строкой, все принадлежащие FreeImage , одной из сторонних библиотек, которые я использую. Итак, проблема, похоже, связана с FreeImage, но я до сих пор не уверен, что делать дальше.

Ответы [ 11 ]

0 голосов
/ 04 марта 2009

От ваших флагов отладочная информация должна быть в объектных файлах.

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

Просто предположение.

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