问题是这样的,单步调试程序时,发现代码会被跳过,没有被执行,因为源码在不联网的机器上,所以没有办法贴出来,以下用伪码描述一下问题,原本的代码也很简单的,就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也没有到过,一进过程就直接到这里了

解决方案 »

  1.   

    有可能编译器认为你的proc2中的for循环中的语句执行不执行是一样的,也就是说for循环中产生的变量或其它变化对后面的程序没有影响,所以直接跳过,优化了
    查查for循环的语句看看,可以看看for循环中的语句是否可以设置断点,如果不能就肯定是优化了,呵呵
      

  2.   

    会不会是proc2中出了啥问题?
    改为function试试看能不能回到原调处继续运行
      

  3.   

     SuperTitan001 说的有道理。
      

  4.   

    to写成downto了?
    delphi的编译还没聪明到把没用代码都优化掉的程度,连空循环都不优化掉
      

  5.   

    或者是stack overflow?没注意过这种情况编译器会怎么处理
      

  6.   

    呃,看了大家的回复,觉得思路开阔了一些,但是似乎不是stack overflow的问题,
    因为程序还能够正常执行下去,只是这些跳过的代码就跟没写一样。今天一天在线,希望路过的朋友继续关注一下,谢谢大家!