调试时明明可以看到执行的加法没有加成功,却通过了调试,最后导致运算错误。

问题描述

这个项目我调试跟踪了,发现在这个值班的判断里面,workQuery没有加上去,本来等于号后面的workQuery数值为8,queryList[i].WorkHours(医值,加班时间为8)有值,值为8,结果到下一局上面的workQuery值还是为8,不是16workQuery+queryList[i].WorkHours=16.0,这是调试的信息明明调试上都看出来不等于了,结果通过了单步调试floatworkQuery=0;值的定义varqueryList=(fromlinlistQuerywherel.ListType==0&&l.StaffSysId==dr["SysId"].ToString()selectl).ToList();queryList是linq查到的集合等于号左边的workQuery一直是8右边的workQuery是8,后面的queryList[i].WorkHours值也是8所以运行之后左边的workQuery就应该为16了结果还是8这种问题应该怎么破啊。。。。

解决方案

解决方案二:
把这句queryList[i].WorkHours重新赋值一个变量重新与workQuery相加。试试
解决方案三:
你确定workQuery这个变量没有在别的地方重新赋值?要看看你这个变量的作用域。。。
解决方案四:
引用2楼zifengshen1981的回复:

你确定workQuery这个变量没有在别的地方重新赋值?要看看你这个变量的作用域。。。

for(inti=0;i<queryList.Count;i++){//在这个循环里定义了这个workQuery变量,每找一天上班时间就看这一天的正常工时是多少,然后赋值给workQuery,//然后判断他这天是否值班,值班了就在workQuery上加上值班班时。就是加不上,不知道什么情况//变量的作用域?floatworkQuery=0;if(query!=null){workQuery=query.WorkHours;}//得到正常工时if(queryList[i].SchedulingType=="1")//值班{workQuery=workQuery+queryList[i].WorkHours;//正常上班8个工时qianxiu=qianxiu+8;//欠休8个工时//workQuery=workQuery+8;//z加上pingrizhiban++;}}
解决方案五:
结果到下一局上面的workQuery值还是为8,不是16。这个没问题,因为你每次循环,只要query不为null,workQuery都会被重新赋值,不再是上一次的值(16);如果query=null。那么workQuery就是0.
解决方案六:
在循环中,你没改变query对象属性值。
解决方案七:
floatworkQuery=0;值的定义这玩意在哪里定义的,是全局变量还是局部变量?不要只会F5执行到断点一步一步跟,你就自然就能跟出问题来了
解决方案八:
还有什么叫"下一局",这说法也太不专业了吧如果你是把程序关了重新打开计算,它能记住之前的值才怪
解决方案九:
右键,查找所有引用,看到底都有哪里给它赋值了是否使用了多线程,或者timer,在你调试这段代码的时候,其他代码还在运行(而没有停止),导致在调试器里看到的值是不正确的
解决方案十:
难怪了,你应该把这个变量放到循环外面。不然每次循环这个变量又从0开始了。。。

时间: 2024-12-02 07:09:29

调试时明明可以看到执行的加法没有加成功,却通过了调试,最后导致运算错误。的相关文章

frameset布局时frame中src路径的页面没有加载的解决方法_JSP编程

解决方法:将页面的body节点去掉,错误代码如下 复制代码 代码如下: <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+":/

GDB秘技--调试时执行代码中的特定函数

        在使用GDB调试程序时,有时遇到看到数据不知所云,必须对照定义才能看懂, 有时还要做些运算才能看出来,这样效率显然不高. 如果需要查看一个变量类的当前值,简单的数据类型还好说,如果遇到一些枚举型的变量或特殊条件,想要看到清晰的数据输出,就会比较繁琐. 好在GDB提供了一个调试时执行某个函数的功能:call, 在需要时能帮你解决大问题.         举个简单的例子,如果有一个类定义了一个dump方法, 在调用时或者在类的内部,都可以在你想要看看数据时,使用call执行一下: a

debug-eclipse调试时光标并不指向当前执行的那行,开发半年了,第一次碰到这个问题!

问题描述 eclipse调试时光标并不指向当前执行的那行,开发半年了,第一次碰到这个问题! eclipse调试时光标并不指向当前执行的那行,比如那绿色光标会指向注释行,有时候会不按逻辑跳转到莫名其妙的一行.开发半年了,第一次碰到这个问题!已经确定不是逻辑问题,编译后的class文件通过反编译查看也没有问题,在project中通过clean再自动编译也没有解决,删除源文件,重新建立文件再编译还是没有解决.这个文件是通过拷贝其他包的class得到的,不知道是不是这里出了问题?因为代码过长,就没有自己

数据结构算法-关于scanf指令跳过执行的问题。单步调试时正确的 。纠结好长时间

问题描述 关于scanf指令跳过执行的问题.单步调试时正确的 .纠结好长时间 运行前两步是正确的,第三步就不正确了我用的是vi 编辑器 调试gdb #include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef int TElemType; typedef int Status;` typedef struct BiTNode { TElemType data; struct BiTNode lchild,

网站调试时没有问题发布后page_load()执行了两次,

问题描述 网站调试时没有问题发布后page_load()执行了两次,计数器每刷新一次,计数加2,应该加1 解决方案 解决方案二:ding解决方案三:没有代码.....解决方案四:如果你做的是ascx的这种控件的话,page_load是会执行两遍的解决方案五:该回复于2011-12-28 17:23:36被版主删除

MVC中使用Knockout,json获取数据成功后,遍历填充视图模型时,代码不执行怎么回事

问题描述 MVC中使用Knockout,json获取数据成功后,遍历填充视图模型时,代码不执行怎么回事 function AppViewModel() { var self = this; self.brandstandards = ko.observableArray(); self.cart = ko.observableArray(); self.orders = ko.observableArray(); function BrandStandardViewModel(firstself

visual studio 2010-为什么vs2012调试时一直显示,无可用源呢?

问题描述 为什么vs2012调试时一直显示,无可用源呢? 原来一直用vs2008,刚刚换上vs2012却发现无法进行调试了,点击中断按钮,就无法像vs2008一样显示当前正在执行代码的位置,并可以对代码进行修改后重新继续调试.开始以为是程序的问题,就在vs2012里面建了一个最简单的程序,发现也是不行,是我哪里设置错了吗?以前曾经装过vs2010也出现了同样的问题,后来卸载了继续用vs2008,现在升级成win10了,vs2008不好安装,想使用vs2012,谁能告诉我呢 解决方案 vs2015

php-当一个程序被调试时 后台(或者说debugger)是如何工作运行的

问题描述 当一个程序被调试时 后台(或者说debugger)是如何工作运行的 以PHP为例 一般PHP是嵌入在HTML里的 当PHP被送入时 后台是如何分析并找出问题的 小弟只是想知道其中的大概过程和原理 不是调试方法和技巧的问题 还有一个小疑惑 能解答就更感谢了 JSP也是嵌入在HTML里运行 但是其调试的对象是servlet 除去语言的不同 和PHP的调试的原理一样吗 解决方案 解释语言本身可以解释一行执行一行,debug直接调用解释器就可以了. 像C++这样的编译语言,则是利用处理器的调试

调试程序-uvision5单步调试时自动进入反汇编的问题

问题描述 uvision5单步调试时自动进入反汇编的问题 个人的强迫症很严重,每次DEBUG单步调试程序时都要进行几次反汇编指令才能跳转到下一条调试的语句,感觉各种不爽.求各位大神帮忙,如何设置单步调试时不执行反汇编,直接执行语句????谢谢