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

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也没有到过,一进过程就直接到这里了
...全文
124 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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
  • 打赏
  • 举报
回复
对于这种灵异事件,无解~

16,747

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧