我正在尝试在OS X 10.9.2下的XCode 5.1(5B130a)中调试C ++ OS X应用程序。 该应用程序由各种库项目组成,这些项目被编译到库中并在主应用程序项目中使用。
我在代码中设置了一个断点,当我在lldb中运行时:
expr 2
这就是我得到的:
(lldb) expr 2
error: field '__f_' declared with incompatible types in different translation units ('__base *' (aka 'std::__1::__function::__base<void (std::__1::shared_ptr<const XXX>, const YYY &)> *') vs. '__base *' (aka 'std::__1::__function::__base<void> *'))
error: field '__f_' declared with incompatible types in different translation units ('__base *' (aka 'std::__1::__function::__base<void (std::__1::shared_ptr<const XXX>, const YYY &)> *') vs. '__base *' (aka 'std::__1::__function::__base<void> *'))
error: expected expression
note: declared here with type '__base *' (aka 'std::__1::__function::__base<void> *')
note: declared here with type '__base *' (aka 'std::__1::__function::__base<void> *')
error: 3 errors parsing expression
请注意,如果我在代码中的其他位置设置断点,则相同的命令可能有效(但不是在任何地方)。这让我认为我正在打破的特定库会产生影响。
我理解某处有std::function<void(std::shared_ptr<const XXX>, const YYY&)>
的定义,而其他一些翻译单元看到的定义不同,(我相信__f_
是std :: function模板的内部字段但是我不清楚:
GCC_OPTIMIZATION_LEVEL
(所有-O0
),COPY_PHASE_STRIP
,... 谢谢!
答案 0 :(得分:0)
这很可能是调试信息而不是生成的代码的问题,这就是您的应用程序正确运行但调试器中的表达式计算器失败的原因。
调试器总是尝试读取所需的最少量的调试信息,以便执行您要求的任何操作。因此,除非您执行导致我们读取不同调试信息的两个模块的内容,否则您将看不到此问题。这就是为什么它有时会发生,有时却不会发生。
无论如何,请使用bugreporter.apple.com提交有关此问题的错误。