Error[8]: Undefined offset: 8, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我正在尝试在Xcode 8中使用LLDB来调试非常基本的STL。我曾经能够打印这样的矢量: p myvector[0] 看第一个向量索引中的内容。现在,当我这样做时,我收到此错误: error: Couldn't lookup symbols: __ZNSt3__16vectorI9my_classNS_9allocatorIS1_EEEixEm 相反,我必须输入: p myvector.__ 我正在尝试在Xcode 8中使用LLDB来调试非常基本的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获得任何有用的输出?

解决方法 []是std :: vector上的运算符方法,因此要打印所需的表达式,lldb必须能够调用[]方法。这里的问题是OS X上的STL积极地内联所有内容,而不是浪费空间来生成相同功能的外包副本。这对于优化代码来说非常好,但对于调试来说却不太好,因为它使调试器没有[]运算符来调用。这是你看到的错误信息。

如果您只想查看此向量中的元素,可以使用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> >) 
(lldb) frame var my_vec[1](Foo) my_vec[1] = (var1 = 10,var2 = 20)
= size=2 { [0] = (var1 = 10,var2 = 20) [1] = (var1 = 10,var2 = 20)}

还有另一个命令“frame variable”,它可以检查静态对象,并挂钩到数据格式化程序。它不能调用函数并执行其他更复杂的表达式解析器任务,但它确实知道如何使用STL数据格式化程序来检索单个元素:

(lldb) frame var -L my_vec[1]0x0000000100100348: (Foo) my_vec[1] = {0x0000000100100348:   var1 = 100x000000010010034c:   var2 = 20}(lldb) expr printf("%d\n",((class Foo *) 0x0000000100100348)->var1)10(int)  = 3

您甚至可以使用frame var的-L选项来定位向量的元素,然后您可以转换地址以将其传递给其他函数:

template class std::vector<MyClass>

另一种解决此问题的方法是调试 – 如果你使用的是C 11 – 是通过以下方式:

[+++]

在你的代码中的某个地方。这将指示编译器为此专业化发出所有模板函数的外联副本。这不是一个很好的通用解决方案,你只想用于调试版本,但它确实允许你调用这些函数并在复杂的表达式中使用它们。

总结

以上是内存溢出为你收集整理的使用XCode/LLDB打印/调试libc STL全部内容,希望文章能够帮你解决使用XCode/LLDB打印/调试libc STL所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
使用XCodeLLDB打印调试libc STL_app_内存溢出

使用XCodeLLDB打印调试libc STL

使用XCodeLLDB打印调试libc STL,第1张

概述我正在尝试在Xcode 8中使用LLDB来调试非常基本的STL。我曾经能够打印这样的矢量: p myvector[0] 看第一个向量索引中的内容。现在,当我这样做时,我收到此错误: error: Couldn't lookup symbols: __ZNSt3__16vectorI9my_classNS_9allocatorIS1_EEEixEm 相反,我必须输入: p myvector.__ 我正在尝试在Xcode 8中使用LLDB来调试非常基本的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获得任何有用的输出?

解决方法 []是std :: vector上的运算符方法,因此要打印所需的表达式,lldb必须能够调用[]方法。这里的问题是OS X上的STL积极地内联所有内容,而不是浪费空间来生成相同功能的外包副本。这对于优化代码来说非常好,但对于调试来说却不太好,因为它使调试器没有[]运算符来调用。这是你看到的错误信息。

如果您只想查看此向量中的元素,可以使用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> >) 
(lldb) frame var my_vec[1](Foo) my_vec[1] = (var1 = 10,var2 = 20)
= size=2 { [0] = (var1 = 10,var2 = 20) [1] = (var1 = 10,var2 = 20)}

还有另一个命令“frame variable”,它可以检查静态对象,并挂钩到数据格式化程序。它不能调用函数并执行其他更复杂的表达式解析器任务,但它确实知道如何使用STL数据格式化程序来检索单个元素:

(lldb) frame var -L my_vec[1]0x0000000100100348: (Foo) my_vec[1] = {0x0000000100100348:   var1 = 100x000000010010034c:   var2 = 20}(lldb) expr printf("%d\n",((class Foo *) 0x0000000100100348)->var1)10(int)  = 3

您甚至可以使用frame var的-L选项来定位向量的元素,然后您可以转换地址以将其传递给其他函数:

template class std::vector<MyClass>

另一种解决此问题的方法是调试 – 如果你使用的是C 11 – 是通过以下方式:

在你的代码中的某个地方。这将指示编译器为此专业化发出所有模板函数的外联副本。这不是一个很好的通用解决方案,你只想用于调试版本,但它确实允许你调用这些函数并在复杂的表达式中使用它们。

总结

以上是内存溢出为你收集整理的使用XCode/LLDB打印/调试libc STL全部内容,希望文章能够帮你解决使用XCode/LLDB打印/调试libc STL所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1069833.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存