【问题标题】:Stacks and Queues are shown as empty in the debugger. Mac堆栈和队列在调试器中显示为空。苹果
【发布时间】:2019-04-20 06:50:38
【问题描述】:

当我通过在断点处停止来调试程序时,队列和堆栈显示为 size=0 而不是,但其他变量(如向量)工作正常。

MacOS 10.14.1 Mojave Cmake 3.12.3 Xcode C++ 编译器 LLDB 6.0 调试模式

【问题讨论】:

  • 问题是:调试器如何计算大小? std::queuestd::stack 都是接受另一个容器作为模板参数的模板。也许调试器无法与这个星座相处。您可能会尝试更深入地挖掘,检查内部 std::deque 的单个成员(默认容器,如果未提供)。比调试器显示的内容更重要的是容器的行为方式。尝试将st.size() 分配给某个变量以查看...
  • 有趣的问题。将来,请发布您的源代码,而不是依赖图像。这允许其他人将您的代码复制并粘贴到他们的 IDE 中。
  • 我看到您在 Mac OS X 上运行。我得到与您使用 Mac OS X 和 CLion 相同的输出。我怀疑您的环境正在使用 XCode 和 CLang。您能否使用真正的 gcc/gdb 设置在 Linux 上使用 CLion 进行尝试。我希望这更多的是编译器和调试器的问题,而不是 CLion 本身。 CLang 的调试器可能会以不同于 gdb 的方式转储对象。正如@Aconcagua 所说,分配st.size() 正确显示了队列的大小。
  • Xcode+lldb 中也会出现这个错误,没有 CLion/Jetbrains reqd :( 所以仍然没有修复 :(

标签: c++ xcode macos clion lldb


【解决方案1】:

错误是 CPP-14918。 解决方法真的很简单,这是一件好事!

您必须找到您的活动 CLion 应用程序(这可以在不同的地方。 例如我的在我的图书馆里 ~/Library/Application\ Support/JetBrains/Toolbox/apps/CLion/ch-0/191.7141.37/CLion.app

从终端,cd 到 CLion.app 目录.. 然后 cd 到 'Contents/bin/lldb/renderers/lldb_formatters'

里面有 init.py 文件 您需要对其进行编辑(使用 sublime、vim、vi 或其他),并注释掉除第一行的 import lldb 之外的所有内容。

所以..

import lldb

#lldb.debugger.HandleCommand('script import lldb_formatters.jetbrains_stl_formatters')
#lldb.debugger.HandleCommand('type synthetic add -l lldb_formatters.jetbrains_stl_formatters.StdDequeSynthProvider -x "^std::deque<.+> >(( )?&)?$"')
#lldb.debugger.HandleCommand('type summary add -F lldb_formatters.jetbrains_stl_formatters.SizeSummaryProvider -e -x "^std::deque<.+> >(( )?&)?$"')
#
#lldb.debugger.HandleCommand('type synthetic add -l lldb_formatters.jetbrains_stl_formatters.StdDeque11SynthProvider -x "^(std::__1::)deque<.+>$"')
#lldb.debugger.HandleCommand('type summary add -F lldb_formatters.jetbrains_stl_formatters.SizeSummaryProvider -e -x "^(std::__1::)deque<.+>$"')
#
#
#lldb.debugger.HandleCommand('type synthetic add -l lldb_formatters.jetbrains_stl_formatters.StdHashtableSynthProvider -x "^(std::tr1::)unordered_set<.+>.*"')
#lldb.debugger.HandleCommand('type summary add -F lldb_formatters.jetbrains_stl_formatters.SizeSummaryProvider -e -x "^(std::tr1::)unordered_set<.+>.*"')
#
#lldb.debugger.HandleCommand('type synthetic add -l lldb_formatters.jetbrains_stl_formatters.StdHashtableSynthProvider -x "^(std::tr1::)unordered_map<.+>.*"')
#lldb.debugger.HandleCommand('type summary add -F lldb_formatters.jetbrains_stl_formatters.SizeSummaryProvider -e -x "^(std::tr1::)unordered_map<.+>.*"')
#
#lldb.debugger.HandleCommand('type synthetic add -l lldb.formatters.cpp.gnu_libstdcpp.StdMapSynthProvider -x "^std::multimap<.+> >(( )?&)?$"')
#lldb.debugger.HandleCommand('type summary add -F lldb_formatters.jetbrains_stl_formatters.SizeSummaryProvider -e -x "^std::multimap<.+> >(( )?&)?$"')
#
#lldb.debugger.HandleCommand('type synthetic add -l lldb_formatters.jetbrains_stl_formatters.StdSetSynthProvider -x "^std::set<.+> >(( )?&)?$"')
#lldb.debugger.HandleCommand('type summary add -F lldb_formatters.jetbrains_stl_formatters.SizeSummaryProvider -e -x "^std::set<.+> >(( )?&)?$"')
#
#lldb.debugger.HandleCommand('type synthetic add -l lldb_formatters.jetbrains_stl_formatters.StdSetSynthProvider -x "^std::multiset<.+> >(( )?&)?$"')
#lldb.debugger.HandleCommand('type summary add -F lldb_formatters.jetbrains_stl_formatters.SizeSummaryProvider -e -x "^std::multiset<.+> >(( )?&)?$"')
#
#lldb.debugger.HandleCommand('type synthetic add -l lldb_formatters.jetbrains_stl_formatters.libcxx_hash_table_SynthProvider -x "^(std::__1::)unordered_(multi)?(map|set)<.+> >$"')
#lldb.debugger.HandleCommand('type summary add -F lldb_formatters.jetbrains_stl_formatters.SizeSummaryProvider -e -x "^(std::__1::)unordered_(multi)?(map|set)<.+>.*"')
#
#lldb.debugger.HandleCommand('type synthetic add -l lldb_formatters.jetbrains_stl_formatters.stdmap_SynthProvider -x "^(std::__1::)(multi)?(map|set)<.+> >$"')
#lldb.debugger.HandleCommand('type summary add -F lldb_formatters.jetbrains_stl_formatters.SizeSummaryProvider -e -x "^(std::__1::)(multi)?(map|set)<.+> >$"')

不用说,如果您不喜欢缺少 jetbrains stl 格式化程序,那么您可以取消注释这些行。但是,问题在于这些格式化程序。

你可能得不到你想要的——格式化程序显然还有其他问题——但你会得到例如。显示的尺寸。

【讨论】:

  • 谢谢!我找了3天的解决方案,终于找到了。谢谢。
  • 这个错误也出现在 Xcode+lldb 中,没有 CLion/Jetbrains reqd :( 所以仍然没有修复 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-18
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 2014-07-21
  • 2015-11-16
  • 2019-03-07
相关资源
最近更新 更多