大佬教程收集整理的这篇文章主要介绍了使用XCode/LLDB打印/调试libc STL,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
p myvector[0]
看第一个向量索引中的内容。现在,当我这样做时,我收到此错误:
error: Couldn't lookup symbols: __ZNSt3__16vectorI9my_classNS_9allocatorIS1_EEEixEm
相反,我必须输入:
p myvector.__begin_[0] in order to get any output.
我尝试从LLDB svn存储库导入libcxx.py和unordered_multi.py脚本,但这似乎没有改变任何东西。
有没有人能够通过libc从LLDB获得任何有用的输出?
如果您只想查看此向量中的元素,可以使用lldb“STL数据格式化程序”为您执行此操作。他们知道大多数STL类型的布局,并且可以打印大多数容器类型的元素。例如:
(lldb) expr my_vec[0] error: Couldn't lookup symbols: __ZNSt3__16vectorI3FooNS_9allocatorIS1_EEEixEm
但:
(lldb) expr my_vec (std::__1::vector<Foo,std::__1::allocator<Foo> >) $0 = size=2 { [0] = (var1 = 10,var2 = 20) [1] = (var1 = 10,var2 = 20) }
还有另一个命令“frame variable”,它可以检查静态对象,并挂钩到数据格式化程序。它不能调用函数并执行其他更复杂的表达式解析器任务,但它确实知道如何使用STL数据格式化程序来检索单个元素:
(lldb) frame var my_vec[1] (Foo) my_vec[1] = (var1 = 10,var2 = 20)
您甚至可以使用frame var的-L选项来定位向量的元素,然后您可以转换地址以将其传递给其他函数:
(lldb) frame var -L my_vec[1] 0x0000000100100348: (Foo) my_vec[1] = { 0x0000000100100348: var1 = 10 0x000000010010034c: var2 = 20 } (lldb) expr printf("%d\n",((class Foo *) 0x0000000100100348)->var1) 10 (int) $3 = 3
另一种解决此问题的方法是调试 – 如果你使用的是C 11 – 是通过以下方式:
template class std::vector<MyClass>
在你的代码中的某个地方。这将指示编译器为此专业化发出所有模板函数的外联副本。这不是一个很好的通用解决方案,你只想用于调试版本,但它确实允许你调用这些函数并在复杂的表达式中使用它们。
以上是大佬教程为你收集整理的使用XCode/LLDB打印/调试libc STL全部内容,希望文章能够帮你解决使用XCode/LLDB打印/调试libc STL所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。