GDB Print for String未正确显示值

时间:2018-04-07 19:26:19

标签: gdb

Weird String Output

当我想检查字符串的当前值是什么时,它会显示$ 1的奇怪消息。我只是想知道它的价值是什么:(

对GDB进行调试的新手,抱歉。

1 个答案:

答案 0 :(得分:0)

  

显示$ 1的奇怪消息

没有什么很奇怪。

实现一个对短字符串和长字符串都表现良好的std::string类有点不重要,您正在查看实现的内部。

  

我只是想知道它的价值是什么

该值显然为lol

如果您对std::string的内部不感兴趣,则应该使用print x.c_str()代替print x

<强>更新

  

当我只打印x时,在gdb里面:为什么这样做而不仅仅是字符串的值。

GDB 确实只显示std::string的值,恰好std::string的内部状态很复杂。

  

是因为它不是原始类型。

  

你怎么知道你必须做x.cstr()等

因为我经常使用std::string,并知道它提供了哪些方法。

  

假设我有一个向量,我只想要向量中的元素,我该怎么做?

您可以打印矢量元素:print v[0]print v[1]

std::vector的某些实现提供了GDB漂亮的打印机,使这更容易。例如,在相当现代的Linux系统上,你会看到类似这样的东西:

(gdb) list
1   #include <vector>
2
3   int main()
4   {
5     std::vector<int> v{1,2,3,7,6,5,4};
6     return v.size();
7   }

(gdb) p v
$1 = std::vector of length 7, capacity 7 = {1, 2, 3, 7, 6, 5, 4}

如果您的实施没有提供这样漂亮的打印机,那么编写一个将是一个很好的学习练习。文档here