Отладчик Xcode: окно кода не совпадает с окном стека - PullRequest
2 голосов
/ 24 февраля 2009

Я пытаюсь портировать довольно большой проект Windows на основе SDL и WxWidgets на Mac OS X.

Впервые на Mac я могу запустить свое приложение, но кажется, что отладчик не работает должным образом. При взломе моего приложения представление стека, кажется, имеет смысл, но когда я нажимаю на одно из имен функций, показанных в представлении стека отладчика, представление кода ниже показывает мне совершенно другой кусок кода.

Например, я нажимаю «main» в представлении стека, но окно кода ниже переходит к строке 100 stdexcept из Mac OS X SDK.

Я пытался использовать отладчик с проектом "hello world", и все работало, поэтому проблема должна быть связана с моим проектом. Я уже проверил следующие параметры в настройках проекта:

Создание символов отладки: 1 уровень

Символы отладки: все символы

Уровень оптимизации: Нет

Варианты сборки: отладка

Я также убедился, что в настройках отладчика «Загрузить символы Lazily» отключено.

Что может стать причиной неисправности отладчика?

Редактировать: Я уже исключил окончание файлов Windows, преобразовав все файлы .cpp и .h в окончания строк Unix, как предложено sqook.

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

    ARCHS = $(NATIVE_ARCH)
    SDKROOT = macosx10.5
    VALID_ARCHS = i386 x86_64
    BUILD_VARIANTS = normal
    MACOSX_DEPLOYMENT_TARGET = 10.4
    COPY_PHASE_STRIP = NO
    DEAD_CODE_STRIPPING = NO
    OTHER_LDFLAGS = $(OTHER_LDFLAGS_LIBBOOST) $(OTHER_LDFLAGS_QUOTED_FOR_PROJECT_1) $(OTHER_LDFLAGS_QUOTED_FOR_PROJECT_2) $(OTHER_LDFLAGS_WXWIDGETS)
    PREBINDING = NO
    PRODUCT_NAME = Gemsweeper
    FRAMEWORK_SEARCH_PATHS = $(HOME)/Library/Frameworks /Library/Frameworks $(FRAMEWORK_SEARCH_PATHS)
    HEADER_SEARCH_PATHS = $(HEADER_SEARCH_PATHS_QUOTED_FOR_PROJECT_7) $(HEADER_SEARCH_PATHS_QUOTED_FOR_PROJECT_6) /usr/local/include $(HEADER_SEARCH_PATHS_QUOTED_FOR_PROJECT_1) $(HEADER_SEARCH_PATHS_QUOTED_FOR_PROJECT_2) $(HOME)/Library/Frameworks/SDL.framework/Headers /Library/Frameworks/SDL.framework/Headers $(HEADER_SEARCH_PATHS) /opt/local/var/macports/software/boost/1.37.0_0+darwin_9/opt/local/include $(HOME)/Library/Frameworks/SDL.framework/Headers /Library/Frameworks/SDL.framework/Headers $(HEADER_SEARCH_PATHS_QUOTED_FOR_PROJECT_3) $(HEADER_SEARCH_PATHS_QUOTED_FOR_PROJECT_4) $(HEADER_SEARCH_PATHS_QUOTED_FOR_PROJECT_5)
    LIBRARY_SEARCH_PATHS = /usr/local/lib /opt/local/lib
    GCC_DEBUGGING_SYMBOLS = full
    GCC_OPTIMIZATION_LEVEL = 0
    OTHER_CFLAGS = $(WX_CXX_FLAGS)
    OTHER_CPLUSPLUSFLAGS = -I/usr/local/lib/wx/include/mac-ansi-debug-2.8 -I/usr/local/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXDEBUG__ -D__WXMAC__
    GCC_PREPROCESSOR_DEFINITIONS = NO_BASS_SOUND _DEBUG XCODE __WXMAC__
    GCC_WARN_ABOUT_RETURN_TYPE = YES
    GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS = YES
    GCC_WARN_UNUSED_VARIABLE = YES
    HEADER_SEARCH_PATHS_QUOTED_FOR_PROJECT_1 = '/Users/adriangrigore/Documents/Gemsweeper Mac'
    HEADER_SEARCH_PATHS_QUOTED_FOR_PROJECT_2 = "/Users/adriangrigore/Documents/Gemsweeper Mac/Finity Engine VS 2003/WxNonogram"
    HEADER_SEARCH_PATHS_QUOTED_FOR_PROJECT_3 = "/Users/adriangrigore/Documents/Gemsweeper Mac/Finity Engine VS 2003/Finity Engine VS 2003/myunits/resmanager"
    HEADER_SEARCH_PATHS_QUOTED_FOR_PROJECT_4 = "/Users/adriangrigore/Documents/Gemsweeper Mac/Finity Engine VS 2003/Finity Engine VS 2003/myunits"
    HEADER_SEARCH_PATHS_QUOTED_FOR_PROJECT_5 = "/Users/adriangrigore/Documents/Gemsweeper Mac/Finity Engine VS 2003/Finity Engine VS 2003"
    HEADER_SEARCH_PATHS_QUOTED_FOR_PROJECT_6 = "/Users/adriangrigore/Documents/Gemsweeper Mac/Finity Engine VS 2003/Finity Engine VS 2003/myunits/compiler-dependent"
    HEADER_SEARCH_PATHS_QUOTED_FOR_PROJECT_7 = '/Users/adriangrigore/Documents/Gemsweeper Mac/3rd party/AntiGrain/include'
    OTHER_LDFLAGS_LIBBOOST = /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
    OTHER_LDFLAGS_QUOTED_FOR_PROJECT_1 = '/Users/adriangrigore/Documents/Gemsweeper Mac/3rd party/FreeImage/Dist/libfreeimage.a'
    OTHER_LDFLAGS_QUOTED_FOR_PROJECT_2 = '/Users/adriangrigore/Documents/Gemsweeper Mac/3rd party/cpuinfo-1.0/libcpuinfo.a'
    OTHER_LDFLAGS_WXWIDGETS = -L/usr/local/lib   -framework IOKit -framework Carbon -framework Cocoa -framework System -framework QuickTime -framework OpenGL -framework AGL  -lwx_macd_richtext-2.8 -lwx_macd_aui-2.8 -lwx_macd_xrc-2.8 -lwx_macd_qa-2.8 -lwx_macd_html-2.8 -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

Надеюсь, последнее редактирование: Я только что обнаружил, что проблема на самом деле не связана с отладчиком XCode, а связана с лежащим в основе GDB. Я вижу точно такую ​​же проблему при отладке моей программы через командную строку. Поэтому я переместил этот вопрос в Трассировка стека отладчика GCC отображает неправильное имя файла и номер строки .

Ответы [ 3 ]

1 голос
/ 24 февраля 2009

Я тоже это заметил и сообщил об ошибке в Apple по этому поводу. Они отрицали поведение, но предположили, что оно может быть вызвано неправильными окончаниями строк в файле. В любом случае попробуйте преобразовать окончания строк в формат unix / mac, выполнить полную очистку, а затем запустить его.

Редактировать : Я должен был указать, что в XCode есть предпочтение, в котором вы можете сохранить тип окончания строки. Вы можете сохранить все файлы там с окончанием строки по вашему выбору. Однако это также несколько противоречиво (grr), поэтому я бы рекомендовал использовать flip и делать что-то вроде:

find /wherever -name "*.cpp" -print -exec flip -u {} \;

Опять же, я не могу гарантировать, что это решит проблему, поскольку я воспользовался советом Apple и все-таки увидел, что отладчик останавливается на несколько десятков строк ниже моей точки останова.

1 голос
/ 24 февраля 2009

Xcode глючит. Очень, очень глючит. Даже 3.x У меня была та же проблема вчера вечером, когда она показала бы зацикливание больше, чем следовало бы. Вставка некоторого printf () показала, что это была ошибка IDE отладчика.

Однако вы можете попробовать чистую сборку. И убедитесь, что вы используете отладочную сборку. И чтобы все модули были загружены.

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

Смотрите мой SO ответ здесь . SDL переопределяет main до SDL_main

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