我有一个std::string
核心转储,我想在gdb中检查。打印它给我的内容为空终止字符串,但我如何访问其他std::string
属性,如大小和容量?试图直接访问s.size()
会导致错误,“如果没有进程调试,则不能这样做。”如何在gdb postmortem中访问像std :: string这样的STL类?
3
A
回答
6
首先,禁用任何漂亮打印机以查看您尝试打印的结构的原始成员变量。
(gdb) disable pretty-printer
对于很多STL类,他们的成员(希望)不会太难以弄清楚。例如,印刷用漂亮的印刷禁用一个std::vector
提供了一种类似于输出如下:
$2 = {, std::allocator >, std::allocator, std::allocator > > >> = { _M_impl = {, std::allocator > >> = {, std::allocator > >> = {}, }, _M_start = 0x804b028, _M_finish = 0x804b02c, _M_end_of_storage = 0x804b02c}}, }
由于成员变量是_M_impl._M_start
,_M_impl._M_finish
,并且_M_impl._M_end_of_storage
,您可以为向量v如下使用它们:
- 元件0 -
_M_impl._M_start[0]
- 大小 -
v._M_impl._M_end - v._M_impl._M_start
- 容量 -
v._M_impl._M_end_of_storage - v._M_impl._M_start
std :: string尤其困难。 libstdc++'s implementation显示容量,大小和引用计数存储在std::basic_string::_Rep
结构中的字符串开始之前,并且gdb无法解析此结构,因此我不得不求助于指针算术hack。以下是如何在32位x86应用程序中使用Pre-C++ 11 ABI字符串s
;其他平台可能不同。
- 引用计数 -
((int*)s._M_dataplus._M_p)[-1]
- 能力 -
((int*)s._M_dataplus._M_p)[-2]
- 大小 -
((int*)s._M_dataplus._M_p)[-3]
相关问题
- 1. 如何修改STL中的std :: valarray类?
- 2. STL相关seg错误在C++ std :: string?
- 3. std :: string是STL的一部分吗?
- 4. C++:如何遍历std :: string中的文本与STL线逐行?
- 5. 如何调用像“ZRem(key string,members ... string)”这样的golang func?
- 6. 在访问某个类的std :: string时崩溃
- 7. 如何在gdb中打印std :: map值
- 8. 从gdb设置std :: string变量值?
- 9. std :: string数组元素访问
- 10. 如何从python访问gdb
- 11. 如何访问控件在像这样定义由一个ItemTemplate
- 12. 在新线程中访问移动的std :: string
- 13. 为什么std :: string的空rep是这样的?
- 14. heroku插件,如何访问像RAILS_ENV这样的env变量?
- 15. STL的std :: remove_copy
- 16. 怎样的std :: string转换为QString的
- 17. GDB调试问题的STL列表
- 18. GDB:漂亮的打印类包含STL容器
- 19. 如何访问std :: vector迭代器中的std :: map属性?
- 20. 如何在C++中实现STL priority_queue中的这种比较类
- 21. C++:的std :: string问题
- 22. 如何在std :: string中存储const char *?
- 23. 如何在QLineEdit中使用std :: string?
- 24. 如何在std :: string中存储const char * []?
- 25. 在C#中的std :: string?
- 26. Unicode std :: string类替换
- 27. stl:地图和镜像数据访问
- 28. std :: string :: append(std :: string)错误的输出
- 29. STL std :: transform
- 30. 为什么不能像这样访问链表中的指针?
这让上当的问题有一个非常过时的答案。真正的答案是https://sourceware.org/gdb/wiki/STLSupport – 2015-04-02 03:28:46
@EmployedRussian - 在我的情况下,GDB STL支持并没有告诉我我需要知道的一切(字符串大小和容量,号码等)。 – 2015-04-02 12:04:59