免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6979 | 回复: 5

两个gdb调试过程中遇到的问题 [复制链接]

论坛徽章:
0
发表于 2011-08-18 14:39 |显示全部楼层
1、我用string类型做为形参的时候,用gdb调试跟进调用函数,为什么会报下面的错误?
    OverflowError: signed integer is greater than maximum
    gdb调试时,无法打印该string变量内容,但是所有逻辑都可按预期的那样处理。

   如果你赋值给另一个string ,则被赋值的变量可打印。
   why??????why?????why??????

  1. //str = "abc"
  2. void test( string str )
  3. {
  4.     string temp = str;
  5.     //gdb 中p str无法正常打印
  6.    //p temp可以正常打印
  7.     return;
  8. }
复制代码
为什么   ? 为什么 ? 为什么 ?

2、

  1. #define  GET_EIGHT_BITS(num, offset)      (((num) >> ((offset) * 8)) & 0xff)
  2. char temp = 0;
  3. for( int n = 3; n >= 0 && GET_EIGHT_BITS(ascii, n) != 0; n-- )
  4. {
  5.     sprintf( &temp, "%c", GET_EIGHT_BITS(ascii, n) );
  6.     //使用下面这句,就不会有任何问题
  7.     //temp = GET_EIGHT_BITS(ascii, n);

  8. }
复制代码
gdb调试,ascii = 0x37777777; n = 2;时
为什么执行sprintf之后ascii的值会变成0x37777700   ??????why why why
而其它语句对ascii没有影响。
sprintf里面有什么故事?

论坛徽章:
0
发表于 2011-08-18 15:28 |显示全部楼层

论坛徽章:
0
发表于 2011-08-18 15:59 |显示全部楼层
不是很懂楼主写的

论坛徽章:
0
发表于 2011-08-18 16:16 |显示全部楼层
第1个问题,是不是处理器给优化处理掉了。。。改变编译选项或许能解决问题哦!

论坛徽章:
0
发表于 2011-08-18 16:27 |显示全部楼层
第2个问题,在sprintf中,如果类型不匹配是不做自动转换的。不是sprintf做了什么,而是内置的=重载做了什么。

论坛徽章:
0
发表于 2011-08-18 16:48 |显示全部楼层
回复 5# jiayanfu


    谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP