阅读:1566回复: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也是一个原因,我以前犯过这样的错误。 感谢大家了。如果谁嫌分少,可以再开一个帖子给分。 |
|
|