LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 849|回复: 2

变量被莫名修改 怎么调试?

[复制链接]
发表于 2008-10-27 21:40:12 | 显示全部楼层 |阅读模式
我做个一个多线性的程序,在线程处理函数中再调用一个函数。
就在这个函数中,一个int pos初始化为0,其后被另外赋值。
然后在一char数组写完结束符'\0'后,pos被莫名修改回0。
起初,以为是被另一个线程的数据被覆盖掉了。
后来就起一个子线程,还是被修改。
不起线程,直接调用,还是被修改。

现在想问怎么回事?gdb用的不是很熟练。请问有什么方法能查看pos到底是怎么被修改掉的?
发表于 2008-11-6 22:01:20 | 显示全部楼层
会不会是溢出了啊?用gdb可以p变量出来看看,也可一增加一个变量,输出一下看看是不是溢出的问题。
回复 支持 反对

使用道具 举报

发表于 2008-11-13 00:03:06 | 显示全部楼层
Post by gongdalaoshu;1900188
我做个一个多线性的程序,在线程处理函数中再调用一个函数。
就在这个函数中,一个int pos初始化为0,其后被另外赋值。
然后在一char数组写完结束符'\0'后,pos被莫名修改回0。
起初,以为是被另一个线程的数据被覆盖掉了。
后来就起一个子线程,还是被修改。
不起线程,直接调用,还是被修改。

现在想问怎么回事?gdb用的不是很熟练。请问有什么方法能查看pos到底是怎么被修改掉的?



很简单,你的程序中pos肯定是静态变量,只要找到有可能访问它附近变量的程序就可以。

不过我要说明的一点是,你在编多线程程序的时候,使用静态变量而且不加保护,这是一个不好的习惯,在大型程序中问题就难找了
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表