【发布时间】:2015-02-16 15:35:40
【问题描述】:
在阅读标准库实现时,我可以看到#if _LIBCPP_DEBUG_LEVEL >= 2 条件启用的许多检查。我尝试在 xcode 预处理器选项中添加 _LIBCPP_DEBUG_LEVEL = 3,但 <iterator> 不再编译:
#if _LIBCPP_DEBUG_LEVEL >= 2
__get_db()->__insert_i(this); <----- the error is on this line
#endif
还有什么我在这里缺少的东西可以为标准库使用更高的调试级别吗?
【问题讨论】:
-
你得到什么错误?
-
似乎 libc++“调试模式”在 XCode 11.1 中仍然不完全可用。我能够获得一个库来编译和链接文件中的
#define _LIBCPP_DEBUG_LEVEL 2和#define _LIBCPP_CONSTEXPR_IF_NODEBUG(不同文件中的代码之间的行为不一致)但是一旦我在main.cpp或通过XCode Preprocessor Macros 尝试设置,我得到未定义的符号链接错误,例如“std::__1::__libcpp_db::__dereferenceable(void const*) const”。链接错误是您看到的还是没有使用到那么远? -
现在尝试了 XCode 11.6,但仍然有未定义的符号。发现虽然单独定义
_LIBCPP_DEBUG=1使得__config包含文件定义_LIBCPP_DEBUG_LEVEL=2和设置_LIBCPP_CONSTEXPR_IF_NODEBUG=不再是必要的。关于如何启用调试模式,这与当前的 LLVM Debug Mode 文档更一致。具体来说,std::__1::__libcpp_db::__insert_c(void*, std::__1::__c_node* (*)(void*, void*, std::__1::__c_node*))符号现在是未定义的,如果不是更多的话。 -
找到一个相关的stackoverflow问题:stackoverflow.com/questions/15899937/…