我的Delphi程序运行时陷入死循环,如何找出导致死循环的语句?(300分)

  • 主题发起人 陈冲伟
  • 开始时间

陈冲伟

Unregistered / Unconfirmed
GUEST, unregistred user!
我的Delphi程序(调试版)运行时陷入死循环,如何找出导致死循环的语句?
 
看是否有的事件会不停地重入,比如ONPAINT。
在ONPAINT中又进行了画窗口的操作。
 
逐步跟踪。
 
设断点跟踪呀
F5和F7/F8
 
最好把所有的语句设置成断点,
简单的是把每一个事件的begin end.这两句设成断点,然后找到产生问题的
事件,在逐句的查找混点分吧好像没有人像我这么大放了,
 
断点,跟踪程序
 
估计一下哪儿可能会死循,在哪儿设个断点,然后单步。
估错了就换个地方再:)
 
有几个可能会造成死循环:

1)循环逻辑错,这是最大的可能,检验你的循环边界,
可以用单步调试的方法,在每个可能的调用入口点及出口
点各置一个断点,先F9,如果有“死机”,再在调用体中
设置断点,F7 转向调用,然后可以在调用体中进行 F7、
F8、F9,相信你肯定能找到的。调试本来就是很辛苦的事,
不要想着有什么捷径。

2)内存错。这种情况一般较少见,但有时会有。程序没有
错,但运行着就死了。重新启动,没有第二个办法。
 
F5可以设置断点,F7是单步跟踪,F8是单步跟踪(不进入子函数),
SHIFT + F7 是用于跟踪汇编代码
SHIFT + F8 是运行到此函数或过程结束处.
F4 是运行到光标处.
然后可以选择你喜欢的方法自由跟踪.
 
莫非你不会跟踪?
 
设置断点后单步跟踪
 
多谢各位的帮助,并非是我不会跟踪。而是这个程序比较麻烦,它是一个读文件的程序,
当用户按下一个键时,它就自动读当前目录下的下一个文件,如果用户按键较慢,则一切运
行正常,但是如果用户按下一个键不放(相当于快速发送很多KeyPress消息),那么有时
(注意,这里是有时)程序会死掉。如果我跟到程序中去,那么相当于用户较慢地按键,程
序不会出现问题,因而也很难找到Bug。所以我想先不设置断点,让程序全速运行,然后出
现死锁后再判断引发死锁的代码,不知道是否可行,还请各位指教。
 
那就可能要在程序中判断一下按键了。
 
截取按键信息吧,在keyup事件中响应
 
设置变量,在循环(并处理系统消息,如果变量有变化就执行 proc a ,变量复位)
 
从你的叙述来看,有点类似以前的“中断程序”。
通常这类程序的编写规则应该是:

触发 --------------
按键-------〉|读文件子程序|
--------------
在读文件子程序中要disable对按键事件的判别,
当子程序结束返回前才可enable对按键事件的判别,
否则很可能在读文件子程序中引发死锁。
 
to milesg:
我的程序中已经设置了标志位,防止重入消息处理子程序。
 
我想只要在四循环发生时,选择菜单“Run|Pause”即可进入四循环体内
 
你应该,做一个文件。
把你的操作记录下来,那就不用短点了
 
顶部