首页
社区
课程
招聘
[求助]为什么会无限循环?
2009-6-5 16:15 3304

[求助]为什么会无限循环?

2009-6-5 16:15
3304
我用的odb, 无论是自动还是手动单步都会在一个地方无限循环,
可是点F9"运行"可以正常运行,这是为什么?

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
点赞0
打赏
分享
最新回复 (8)
雪    币: 1450
活跃值: (35)
能力值: (RANK:680 )
在线值:
发帖
回帖
粉丝
jackozoo 14 2009-6-5 16:20
2
0
不明白LZ的问题.
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kucheng 2009-6-5 16:23
3
0
比如有个函数x, 现在程序call x, 然后我F7步入进去就有一段代码无限循环,
但是我如果不进去这个函数直接F8步过,这个函数可以正常返回.....
雪    币: 1450
活跃值: (35)
能力值: (RANK:680 )
在线值:
发帖
回帖
粉丝
jackozoo 14 2009-6-5 16:44
4
0
如果x的代码不多, 你可以贴上来看看~
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
manskinbot 2009-6-5 20:06
5
0
可能循环了1000次,你一步步跟当然觉得是无穷循环,F8一下当然又正常返回~~
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kucheng 2009-6-5 20:32
6
0
绝对不是有穷循环, 我用自动跟踪了5分钟还循环, 而且一直在重复固定的几个数字, 现在贴不了代码...
雪    币: 22
活跃值: (74)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
SFQin 2009-6-5 20:33
7
0
贴下代码看看比较好。
雪    币: 2108
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
书呆彭 6 2009-6-6 18:31
8
0
自动跟踪说明不了问题。

CPU执行一条指令花费的时间在ns级别,而跟踪一条指令至少要慢上几个数量级。

OLLY1中的跟踪功能,实现为自动单步运行程序。因此,每执行一条指令,CPU至少要进入单步异常的处理,进入内核,最后由内核调度调试器进程运行,最后调试器还要执行很多分析记录的工作。假设跟踪一条指令所花的时间在us级别,也相差了3个数量级。按这样的时间算,假设1秒能执行完的程序,跟踪的话需要数十分钟!在很多数值计算的场合,一个算法运行数百毫秒甚至数秒是很常见的事。

似乎OLLY2中的跟踪功能使用指令级模拟技术(可能我记错了,不过至少与OLLY1不一样的),可以让跟踪的速度快许多。然而OLLY2目前还没有正式发布。

分析循环,一种可能的方法是用ollyflow插件,或IDA,生成这段代码的流程图,然后从流程图中就可以找到循环的出口附近的代码。

注:程序利用SEH及单步异常,可以实现这样的功能:程序正常运行时不循环,而当调试器单步运行时执行无限循环。选择OD不忽略单步异常,F9运行程序,看看会不会有单步异常发生。如果有的话,就是SEH
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kucheng 2009-6-7 09:51
9
0
谢LS老大, 长知识了, 应该是你说的"数量级"问题, 看来还要更加努力谢谢大家!
游客
登录 | 注册 方可回帖
返回