Xcode调试器:代码窗口不匹配堆栈窗口 [英] Xcode debugger: Code window does not match stack window

查看:110
本文介绍了Xcode调试器:代码窗口不匹配堆栈窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图移植一个基于 SDL WxWidgets 到Mac OS X。



有史以来第一次在Mac上,我可以运行我的应用程序,但调试器似乎不能正常工作。当进入我的应用程序时,堆栈视图似乎是有道理的,但是当我点击调试器堆栈视图中显示的某个函数名称时,下面的代码视图显示了一段完全不同的代码。



例如,我在堆栈视图中单击main,但下面的代码窗口从Mac OS X SDK跳转到stdexcept的第100行。



我试着用一个hello world项目使用调试器,并且一切正常,所以问题必须与我的项目相关。我已经在项目选项中检查了以下设置:
$ b


生成调试符号:1级



调试符号:所有符号



优化级别:无

构建变体:debug


我也确保在调试器偏好设置中关闭Load Symbols Lazily。



什么可能导致调试器出现故障?

编辑:我已经排除了所有.cpp和.h文件到sqook建议的Unix行尾。

第二个编辑:由于问题只发生在这个特定的项目中,这里是我从默认设置(标题搜索路径除外)更改的所有设置。也许其中之一可能是罪魁祸首?

  ARCHS = $(NATIVE_ARCH)
SDKROOT = macosx10 .5
VALID_ARCHS = i386 x86_64
BUILD_VARIANTS =正常
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 /本地/包括$(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 / softw是/升压/ 1.37.0_0 + darwin_9 /选择/本地/包括$(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 =全部
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 ='/用户/ adriangrigore /文档/ Gemsweeper Mac的
HEADER_SEARCH_PATHS_QUOTED_FOR_PROJECT_2 =/用户s / 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 /编译器相关
HEADER_SEARCH_PATHS_QUOTED_FOR_PROJECT_7 ='/ Users / adriangrigore / Documents / Gemsweeper Mac /第三方/ AntiGrain /包含'
OTHER_LDFLAGS_LIBBOOST = /opt/local/lib/libboost_program_options-mt.a /opt/local/lib/libboost_filesystem-mt.a / opt / local / lib / libboost_serialization-mt 。一个 / 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 /第三方/ 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 Debugger绑定,而是与底层的GDB有关。通过命令行调试我的程序时,我看到完全相同的问题。因此,我将这个问题转移到了 GCC调试器堆栈跟踪显示错误的文件名和行号

解决方案

我也注意到了这一点,并向Apple报告了这个问题。他们否认这种行为,但表示可能是由文件中的错误行尾引起的。无论如何,尝试将行结束符转换为unix / mac格式,完全清理并运行它。 已经指定在Xcode中,您可以保存行结束类型。您可以使用所选行的结尾重新保存所有文件。但是,这也有点不一致(grr),所以我建议使用翻转,并执行如下操作:

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

同样,我不能保证这会解决问题,因为我采取了Apple的建议,仍然最后看到调试器停在断点以下几十行。


I'm trying to port a fairly large Windows project based on SDL and WxWidgets to Mac OS X.

For the first time ever on a Mac, I can run my application, but the debugger does not seem to work properly. When breaking into my application, the stack view seems to make sense, but when I click on one of the function names shown in the debugger stack view, the code view below shows me a completely different piece of code.

For example, I click on "main" in the stack view, but the code window below jumps to line 100 of stdexcept from the Mac OS X SDK.

I've tried using the debugger with a "hello world" project and everything worked, so the problem must be related to my project. I've already checked the following settings in the project options:

Generate Debug Symbols: 1 Level of

Debug Symbols: All Symbols

Optimization Level: None

Build Variants: debug

I've also made sure that "Load Symbols Lazily" is switched off in the debugger preferences.

What could cause the debugger to malfunction?

Edit: I have already ruled out Windows file endings by converting all .cpp and .h files to Unix line endings as suggested by sqook.

Second Edit: Since the problem only occurs in this particular project, I am posting here all settings that I have changed from the default settings (except the header search paths). Perhaps one of these could be the culprit?

    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

Hopefully last edit: I've just found out that the problem is in fact not tied to the Xcode Debugger, but has to do with the underlying GDB. I am seeing exactly the same problem when debugging my program via the command line. I have therefore moved this question to GCC debugger stack trace displays wrong file name and line number.

解决方案

I've noticed this too, and reported a bug to Apple about this. They denied the behavior, but suggested it could be caused by the wrong line endings in the file. Anyways, try converting the line endings to the unix/mac format, doing a full clean, and then running it.

Edit: I should have specified that in Xcode, there is a preference where you can save the line ending type. You can resave all the files there with the line ending of your choosing. However, this is also somewhat inconsistent (grr), so I'd recommend using flip, and doing something like:

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

Again, I can't guarantee that this will solve the problem, as I took Apple's advice and still ended up seeing the debugger stop a few dozen lines below my breakpoint.

这篇关于Xcode调试器:代码窗口不匹配堆栈窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆