none
遇到的两个怪问题:难以描述 RRS feed

  • 问题

  • 最近在学习开发的时候,遇到两个怪问题,不知道有没有人也同样遇到过,希望有人能指点下:
    1. 最近做项目的时候使用人家做的一个控件,在进行属性传值的时候,有一个属性我明明就直接给个数字2(A.属性=2),有时候它却显示的是4的结果,
        我设置断点调试,有时会出现A.属性=4(但我赋值的是2啊),起初我认为是人家的控件有问题,但是在人家的Demo里测试是没有问题的,我是直接用
        他里面的dll文件,照着他同样的方法做的,结果用到我的工程了就出问题了。
        而这问题怪就怪在,他不是每次都会出现这样的错误,有时同一次运行同样的初始条件,第一次点击按钮运算时就出错,再点击按钮又正确,有时第一次点击按钮运算就是正确的
        他的控件的这个属性只能传值0~4,大于4的会直接设为4,但是我是直接给个数字2啊,应该不是这个问题。
        我的工程暂时还没有使用多线程,运算速度比较慢,会不会也有关系呢,摸不着头脑,我同样建其他的工程,只是测试他的那个属性,不做其他运算,结果却是次次正确,时延真的有影响吗?
    2. 我初始化了一个Queue对象q
        if(q.Count!=0)
        {
              出队列
        } 
        结果明明明明运行到队列为空了,即是q.Count=0了他还是会执行出队列的操作,结果出现了对象空引用的错误。也让人费解。
    2009年12月12日 4:18

答案

  • 你好!
         1,我认为控件本身有问题的可能性不大,应该是你的代码的其他部分影响了这个属性的值,你可以用监视窗口来监视这个属性,然后单步调试,看看执行到哪行代码的时候这个值改变!
         2,有两种可能性:
              1,q.Count可能并不是0
              2,你代码的其他部分在出队操作,你也可以用单步的方法来跟踪!

         希望这些建议对你有一点帮助!
    周雪峰
    • 已标记为答案 梦里人 2009年12月13日 5:11
    2009年12月12日 9:09
    版主

全部回复

  • 你好!
         1,我认为控件本身有问题的可能性不大,应该是你的代码的其他部分影响了这个属性的值,你可以用监视窗口来监视这个属性,然后单步调试,看看执行到哪行代码的时候这个值改变!
         2,有两种可能性:
              1,q.Count可能并不是0
              2,你代码的其他部分在出队操作,你也可以用单步的方法来跟踪!

         希望这些建议对你有一点帮助!
    周雪峰
    • 已标记为答案 梦里人 2009年12月13日 5:11
    2009年12月12日 9:09
    版主
  • 1.我只有一个地方使用了那个属性值,直接赋值为2的,所以不存在其他地方修改了值
    2.队列的count真的是为空了他还出队列,单步调试,明显看到count为0了,但是他还是执行出队列,是不是单步调试鼠标移到变量哪里看到的值不是真的。
    还望指教。
    2009年12月13日 3:54
  • 你好!
         1,这个控件的源代码是否可以查看,看看这个属性的定义,不可能发生这样“灵异”的事情啊!
         2,打个断点,用监视窗口看看!
         最了解代码的还是自己,冷静下来慢慢的调试,应该可以找到原因的啊!
    周雪峰
    2009年12月13日 4:58
    版主
  • 恩,谢谢,我自己在检查下
    2009年12月13日 5:10
  • 不客气啊!
    如果有新的线索,可以继续交流啊!
    周雪峰
    2009年12月13日 5:24
    版主
  • 队列那个问题解决了,我入队列的时候出问题了,多入了个null所以出队列时才出现空对象引用错误
    2009年12月13日 7:13
  • 感谢“梦里人”分享你的经验啊!
    周雪峰
    2009年12月13日 8:46
    版主