问题是这样的,单步调试程序时,发现代码会被跳过,没有被执行,因为源码在不联网的机器上,所以没有办法贴出来,以下用伪码描述一下问题,原本的代码也很简单的,就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也没有到过,一进过程就直接到这里了
另外,代码只是被跳过了而已,程序没有抛出异常也没有挂掉,仍然继续正常运行,只是每次走到这个地方都是一样的,会跳过代码;
代码很简单,中间也没有跳转的语句,很困惑。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也没有到过,一进过程就直接到这里了
查查for循环的语句看看,可以看看for循环中的语句是否可以设置断点,如果不能就肯定是优化了,呵呵
改为function试试看能不能回到原调处继续运行
delphi的编译还没聪明到把没用代码都优化掉的程度,连空循环都不优化掉
因为程序还能够正常执行下去,只是这些跳过的代码就跟没写一样。今天一天在线,希望路过的朋友继续关注一下,谢谢大家!