beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1566回复:14

调试问题。

楼主#
更多 发布于:2002-07-30 14:02
用softice跟踪iocontrol进出后发现运行case语句时指针会乱跳,一会执行下一句,一会又跳到前面若干句去了。
我的每个case后都有一个break,有的地方还用的goto ,就这样还是会跳来跳去?
什么原因?
只要能解决问题,就一定给分。 希望高手赐教!
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-30 15:18
是不是驱动程序没有更新?
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-30 15:26
编译器会对你的代码做编译优化,这样有可能相同的语句会略掉,这样当你用softice的时候,有可能会跳转到很远的相同语句上,但基本还会跳回来继续执行!
gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-30 15:45
编译器会对你的代码做编译优化,这样有可能相同的语句会略掉,这样当你用softice的时候,有可能会跳转到很远的相同语句上,但基本还会跳回来继续执行!


就是的,我觉得编译器很智能的,能根据实际情况尽量减小代码,加快速度,令我滔滔江水。。。 :) :) :)
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2002-07-30 15:49
应该不会的,如果是debug的话。debug一般都是不作优化的,是什么,就是什么。除非是release的,但是release的一般又不会有denug信息。
我觉得还是财主说的有点的可能。
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-30 15:51
可是以前编译好的程序怎么突然乱执行了呢?
我再编译一遍吧。
只要能解决问题,就一定给分。 希望高手赐教!
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-30 15:53
我试过的,debug的也会做优化,特别是2000的和xp的,他们的debug版本和release版本大小差别不会很大!

arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2002-07-30 16:00
就像财主说的那样,在内存的driver没有被更新。
就算优化了,应该也不会这样的,如果可以看见源码的话。
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-30 16:05
当然这也是个可能的原因!
Snare
驱动小牛
驱动小牛
  • 注册日期2002-01-31
  • 最后登录2002-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-07-30 16:56
debug版优化是一定有的,我验证过。
我就是我,没什么可说的。
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-07-30 17:54
用softice跟踪iocontrol进出后发现运行case语句时指针会乱跳,一会执行下一句,一会又跳到前面若干句去了。
我的每个case后都有一个break,有的地方还用的goto ,就这样还是会跳来跳去?
什么原因?

记得以前有人问过相同的问题,结果好象是在定义命令码时的最后一个参数的问题,
#define CTL_CODE( DeviceType, Function, Method, Access ) (                 \\
    ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \\
)
即Access,一般定义为FILE_ANY_ACCESS,另外还有几个FILE_ALL_ACCESS什么的好象有问题,可能就是你上面的问题。
Tom_lyd
kwxkzk
驱动牛犊
驱动牛犊
  • 注册日期2002-06-17
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-07-30 19:10
我曾经遇到的有这样几种情况导致调试与源代码的不一致:
1。内存中的版本与编译的版本不一致。这种情况下请先rebuild all,然后重起(如果你的Driver没有Unload例程的话)或者卸载Driver(在softice下用device命令验证一下),确保清除内存中copy,然后加载driver的sys等类似的code文件,转换并加载符号文件即可。
2。driver中的宏扩展是看不到对应的源代码的。
3。如果driver是share的,并被多个进程调用的话,也会在表面上呈现这种感觉。
你做过什么? 你在做什么? 你为什么这样做? 你要做什么?
kwxkzk
驱动牛犊
驱动牛犊
  • 注册日期2002-06-17
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-07-30 19:12
另外,debug即使有优化,也可以通过调整相应的编译参数来屏蔽
你做过什么? 你在做什么? 你为什么这样做? 你要做什么?
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-07-31 08:41
老兄:你的问题是解决还是未解决?结果又如何 ?
Tom_lyd
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-07-31 08:45
老兄:你的问题是解决还是未解决?结果又如何 ?

问题没有多大解决,尤其是在case中又有case还有if还有goto。程序有时会跳来跳去,但是结果是对的。估计是编译的时候进行了些优化。
淡然你说的没有重新load也是一个原因,我以前犯过这样的错误。

感谢大家了。如果谁嫌分少,可以再开一个帖子给分。
只要能解决问题,就一定给分。 希望高手赐教!
游客

返回顶部