令人困惑的问题,高分求教,路过的进来看一下吧

madgod 2009-05-12 05:35:03
问题是这样的,单步调试程序时,发现代码会被跳过,没有被执行,因为源码在不联网的机器上,所以没有办法贴出来,以下用伪码描述一下问题,原本的代码也很简单的,就30行左右,也只是做了一些简单的数据操作而已。
另外,代码只是被跳过了而已,程序没有抛出异常也没有挂掉,仍然继续正常运行,只是每次走到这个地方都是一样的,会跳过代码;
代码很简单,中间也没有跳转的语句,很困惑。

Procedure XXX.proc1(param1,param2....)
Var
...
Begin
语句1;
语句2;
if(b1) then Exit;
...
语句m; ----------执行到这里还是好的

Proc2(x,y); -----------进入proc2,从proc2跳出后直接跳到proc1的结束处

语句n1;
if(b1) then Exit;
语句n2;
End; -----------从proc2跳出后直接到这里,语句n1和n2都没有执行

Procedure XXX.proc2(param1,param2)
Var
...
Begin
for i:=0 to 5-1 do
begin
语句a1;
...
end;
End; --------------进入Proc2后直接跳转到此处,未执行循环,a1一次都没有到过,for i:=0 to 5-1 do也没有到过,一进过程就直接到这里了
...全文
67 点赞 收藏 12
写回复
12 条回复
madgod 2009年05月13日
呃,看了大家的回复,觉得思路开阔了一些,但是似乎不是stack overflow的问题,
因为程序还能够正常执行下去,只是这些跳过的代码就跟没写一样。今天一天在线,希望路过的朋友继续关注一下,谢谢大家!
回复 点赞
Seamour 2009年05月12日
或者是stack overflow?没注意过这种情况编译器会怎么处理
回复 点赞
Seamour 2009年05月12日
to写成downto了?
delphi的编译还没聪明到把没用代码都优化掉的程度,连空循环都不优化掉
回复 点赞
justin_wkf 2009年05月12日
應該是for循環出現問題
回复 点赞
sparklerl 2009年05月12日
[Quote=引用 3 楼 SuperTitan001 的回复:]
有可能编译器认为你的proc2中的for循环中的语句执行不执行是一样的,也就是说for循环中产生的变量或其它变化对后面的程序没有影响,所以直接跳过,优化了
查查for循环的语句看看,可以看看for循环中的语句是否可以设置断点,如果不能就肯定是优化了,呵呵
[/Quote]
up
回复 点赞
shuihan20e 2009年05月12日
肯定是自己写错了,解决方法就是仔细找原因,或者把原来的代码推倒,重写
回复 点赞
ahjoe 2009年05月12日
考虑 优化 与 堆栈破坏
回复 点赞
sqrkim 2009年05月12日
SuperTitan001 说的有道理。
回复 点赞
mdejtod 2009年05月12日
会不会是proc2中出了啥问题?
改为function试试看能不能回到原调处继续运行
回复 点赞
SuperTitan001 2009年05月12日
有可能编译器认为你的proc2中的for循环中的语句执行不执行是一样的,也就是说for循环中产生的变量或其它变化对后面的程序没有影响,所以直接跳过,优化了
查查for循环的语句看看,可以看看for循环中的语句是否可以设置断点,如果不能就肯定是优化了,呵呵
回复 点赞
sqrkim 2009年05月12日
还是得靠自己找。。。。没看出来哪有毛病
回复 点赞
liangpei2008 2009年05月12日
对于这种灵异事件,无解~
回复 点赞
发动态
发帖子
语言基础/算法/系统设计
创建于2007-08-02

3418

社区成员

3.3w+

社区内容

Delphi 语言基础/算法/系统设计
社区公告
暂无公告