首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印gdb - C++中的流值

打印gdb - C++中的流值
EN

Stack Overflow用户
提问于 2011-12-05 05:25:25
回答 6查看 14.6K关注 0票数 14

我正在尝试了解stream的价值(ifstream,但我想它应该适用于所有类型的流)。示例代码可能如下所示:

代码语言:javascript
复制
stringstream in("One Two Three Four Five");
while(in)
cout << in;

我试着用下面的方法来做,但似乎都不管用:

代码语言:javascript
复制
(gdb) print in
(gdb) call cout << in
(gdb) call in.getline()

..。诸若此类。

有没有办法,看看这个流的价值?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-09-06 13:36:40

您必须确保您的包包含使用调试标志编译的libstdc++库。

我已经安装了libstdc++6-8-dbg包,现在可以在gdb中查看所有流对象数据。

票数 13
EN

Stack Overflow用户

发布于 2013-09-18 20:19:40

通过使用-D_GLIBCXX_DEBUG重新编译所有内容(而不仅仅是一两个翻译单元),我得到了我需要的东西。然后我就可以做

代码语言:javascript
复制
(gdb) p is.tellg()
$21 = {_M_off = 0, _M_state = {__count = 0, __value = {__wch = 0, __wchb = "\000\000\000"}}}
(gdb) 

其中is是一个std::istream&。以前我得到的是

代码语言:javascript
复制
(gdb) p is.tellg()
Couldn't find method std::istream::tellg
(gdb) p is

此外,当我只重新构建了一个编译单元时,它运行了,但崩溃了

代码语言:javascript
复制
...
305d85d000-305d85e000 r--p 0005d000 fd:01 1180082                        /lib64/libfreebl3.so
305d85e000-305d85f000 rw-p 0005e000 fd:01 118
Program received signal SIGABRT, Aborted.
0x0000003052e35215 in raise () from /lib64/libc.so.6
(gdb)

另请参阅:http://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode_using.html#debug_mode.using.mode

票数 4
EN

Stack Overflow用户

发布于 2011-12-05 05:29:13

你有没有试过print in.str()或者print in.str().c_str()

因为stringstream has a str method给出了std::string,而string has a c_str method给出了char*

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8378721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档