| 
					阅读:1654回复:14
				 调试问题。
					用softice跟踪iocontrol进出后发现运行case语句时指针会乱跳,一会执行下一句,一会又跳到前面若干句去了。
 我的每个case后都有一个break,有的地方还用的goto ,就这样还是会跳来跳去? 什么原因? | |
| 
 | 
| 沙发#发布于:2002-07-30 15:18 
					是不是驱动程序没有更新?				 | |
| 
 | 
| 板凳#发布于:2002-07-30 15:26 
					编译器会对你的代码做编译优化,这样有可能相同的语句会略掉,这样当你用softice的时候,有可能会跳转到很远的相同语句上,但基本还会跳回来继续执行!				 | |
| 地板#发布于:2002-07-30 15:45 编译器会对你的代码做编译优化,这样有可能相同的语句会略掉,这样当你用softice的时候,有可能会跳转到很远的相同语句上,但基本还会跳回来继续执行! 就是的,我觉得编译器很智能的,能根据实际情况尽量减小代码,加快速度,令我滔滔江水。。。 :) :) :) | |
| 地下室#发布于:2002-07-30 15:49 
					应该不会的,如果是debug的话。debug一般都是不作优化的,是什么,就是什么。除非是release的,但是release的一般又不会有denug信息。
 我觉得还是财主说的有点的可能。 | |
| 5楼#发布于:2002-07-30 15:51 
					可是以前编译好的程序怎么突然乱执行了呢?
 我再编译一遍吧。 | |
| 
 | 
| 6楼#发布于:2002-07-30 15:53 
					我试过的,debug的也会做优化,特别是2000的和xp的,他们的debug版本和release版本大小差别不会很大!
 | |
| 7楼#发布于:2002-07-30 16:00 
					就像财主说的那样,在内存的driver没有被更新。
 就算优化了,应该也不会这样的,如果可以看见源码的话。 | |
| 8楼#发布于:2002-07-30 16:05 
					当然这也是个可能的原因!				 | |
| 9楼#发布于:2002-07-30 16:56 
					debug版优化是一定有的,我验证过。				 | |
| 
 | 
| 10楼#发布于:2002-07-30 17:54 用softice跟踪iocontrol进出后发现运行case语句时指针会乱跳,一会执行下一句,一会又跳到前面若干句去了。 记得以前有人问过相同的问题,结果好象是在定义命令码时的最后一个参数的问题, #define CTL_CODE( DeviceType, Function, Method, Access ) ( \\ ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \\ ) 即Access,一般定义为FILE_ANY_ACCESS,另外还有几个FILE_ALL_ACCESS什么的好象有问题,可能就是你上面的问题。 | |
| 
 | 
| 11楼#发布于:2002-07-30 19:10 
					我曾经遇到的有这样几种情况导致调试与源代码的不一致:
 1。内存中的版本与编译的版本不一致。这种情况下请先rebuild all,然后重起(如果你的Driver没有Unload例程的话)或者卸载Driver(在softice下用device命令验证一下),确保清除内存中copy,然后加载driver的sys等类似的code文件,转换并加载符号文件即可。 2。driver中的宏扩展是看不到对应的源代码的。 3。如果driver是share的,并被多个进程调用的话,也会在表面上呈现这种感觉。 | |
| 
 | 
| 12楼#发布于:2002-07-30 19:12 
					另外,debug即使有优化,也可以通过调整相应的编译参数来屏蔽				 | |
| 
 | 
| 13楼#发布于:2002-07-31 08:41 
					老兄:你的问题是解决还是未解决?结果又如何 ?				 | |
| 
 | 
| 14楼#发布于:2002-07-31 08:45 老兄:你的问题是解决还是未解决?结果又如何 ? 问题没有多大解决,尤其是在case中又有case还有if还有goto。程序有时会跳来跳去,但是结果是对的。估计是编译的时候进行了些优化。 淡然你说的没有重新load也是一个原因,我以前犯过这样的错误。 感谢大家了。如果谁嫌分少,可以再开一个帖子给分。 | |
| 
 | 
 
							
 
				 
				 
				
 
				 
				