是gdb的bug还是?求大神看下

宁南学者 2018-08-13 09:23:17
class Test
{
public:
Test(string str)---------------------1处
{
cout<<str<<endl;------------------------2处
}

};
main()
{
string str="abc";
Test *t =new Test(str);

}



}
程序如上,在gdb 调试的时候到1处,2处,发现p str显示的是乱码,而通过cout输出又是正常的,这是gdb的bug吗?遇到这种情况如何调试那?
...全文
653 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
CyberLogix 2018-08-17
  • 打赏
  • 举报
回复
Gdb的字符编码没有设置对,下载最新GDB试试,也可能是GDB的BUG
宁南学者 2018-08-17
  • 打赏
  • 举报
回复
可能是优化掉吧,不过在编译的时候,加了-O0,防止进行优化,实际还是这样。
bobobq 2018-08-16
  • 打赏
  • 举报
回复
会不会是应为string被封装了的缘故!若用char*应该不会有这个问题
AlbertS 2018-08-16
  • 打赏
  • 举报
回复
应该是被优化掉了,显示的不是正常的数据
在cout<<str<<endl;处打印显示

(gdb) p str
$3 = {
static npos = 4294967295,
_M_dataplus = {
<std::allocator<char>> = {
<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
members of std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider:
_M_p = 0xffffd5d8 "\024\240\004\b\364/A"
}
}


但是在Test *t =new Test(str);处显示正常

(gdb) p str
$1 = {static npos = 4294967295, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x804a014 "1234"}}

(gdb) pstring str
String = "1234"
String size/length = 4
String capacity = 4
String ref-count = 0


宁南学者 2018-08-16
  • 打赏
  • 举报
回复
当然不是中文输出,就是普通的string 拷贝, 在gdb情况下会打印出错的,有碍于调试,但是实际运行结果又是正常的。
V天天向上 2018-08-15
  • 打赏
  • 举报
回复
不是中文输出啊
qazwsxhai 2018-08-14
  • 打赏
  • 举报
回复
引用 10 楼 qq_36751214 的回复:
CSDN据说大神很多,这个小问题,难道没有人遇到过吗?这个问题发生在项目一个大程序里面,很是不方便进行调试,大神在何处????


帮你顶起吧, 另外大神都很忙, 但不是忙着看贴,回答你的问题. 人家也有人家的工作和生活. 问问题请虚心一点请教. 很多人看到你这句话懒得理你了, 能回答你的已经是非常好脾气的网友了.
  • 打赏
  • 举报
回复
我总感觉你是想输出中文
宁南学者 2018-08-14
  • 打赏
  • 举报
回复
第一处和第二处,打印出来都是乱码,应该拷贝构造已经运行,实际运行结果又是正常的。
xiatan19910926 2018-08-14
  • 打赏
  • 举报
回复
class Test
{
public:
Test(string str)---------------------1处
{
cout<<str<<endl;------------------------2处
}

};
main()
{
string str="abc";
Test *t =new Test(str);

}



}
竞天问 2018-08-14
  • 打赏
  • 举报
回复
还有,你的代码真的是只输出"abc"这么简单的串?
竞天问 2018-08-14
  • 打赏
  • 举报
回复
第一处有可能str还没有真传过来,也就是说str的复制构造函数还没有执行,可以进入汇编代码确认一下
第二处就不知道了,第二处是这个语句执行了还是没执行?
宁南学者 2018-08-13
  • 打赏
  • 举报
回复
都是Utf8,和字符编码,没有关系,目前来看,是优化的可能性较大,但是也只是猜测, 大家有时间在自己平台上 gdb测试下,这个问题 什么原因,如果能 避免,还请不吝赐教啊
sghcpt 2018-08-13
  • 打赏
  • 举报
回复
楼主,大神昨晚加班,都还没有睡醒呢。哈哈。。。楼主,gdb那边或者vim那边的字符编码是什么呢?utf8还是其他??
宁南学者 2018-08-13
  • 打赏
  • 举报
回复
CSDN据说大神很多,这个小问题,难道没有人遇到过吗?这个问题发生在项目一个大程序里面,很是不方便进行调试,大神在何处????
宁南学者 2018-08-13
  • 打赏
  • 举报
回复
编译的时候加上-O0 ,还是会有这个问题,应该排除是编译器优化导致...
宁南学者 2018-08-13
  • 打赏
  • 举报
回复
应该不是吧,
zilaishuichina 2018-08-13
  • 打赏
  • 举报
回复
lz是不是编译选项开优化了。。。
宁南学者 2018-08-13
  • 打赏
  • 举报
回复
论坛里的大牛们都在忙啥那?这个问题 没有知道原因的吗?
宁南学者 2018-08-13
  • 打赏
  • 举报
回复
gdb调试的过程中,p str打印的,
加载更多回复(5)

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧