陈 陈冲伟 Unregistered / Unconfirmed GUEST, unregistred user! 2001-09-16 #1 我的Delphi程序(调试版)运行时陷入死循环,如何找出导致死循环的语句?
呆 呆非4 Unregistered / Unconfirmed GUEST, unregistred user! 2001-09-16 #2 看是否有的事件会不停地重入,比如ONPAINT。 在ONPAINT中又进行了画窗口的操作。
陈 陈晨 Unregistered / Unconfirmed GUEST, unregistred user! 2001-09-16 #6 最好把所有的语句设置成断点, 简单的是把每一个事件的begin end.这两句设成断点,然后找到产生问题的 事件,在逐句的查找混点分吧好像没有人像我这么大放了,
悲 悲酥清风 Unregistered / Unconfirmed GUEST, unregistred user! 2001-09-16 #8 估计一下哪儿可能会死循,在哪儿设个断点,然后单步。 估错了就换个地方再:)
D ddev Unregistered / Unconfirmed GUEST, unregistred user! 2001-09-16 #9 有几个可能会造成死循环: 1)循环逻辑错,这是最大的可能,检验你的循环边界, 可以用单步调试的方法,在每个可能的调用入口点及出口 点各置一个断点,先F9,如果有“死机”,再在调用体中 设置断点,F7 转向调用,然后可以在调用体中进行 F7、 F8、F9,相信你肯定能找到的。调试本来就是很辛苦的事, 不要想着有什么捷径。 2)内存错。这种情况一般较少见,但有时会有。程序没有 错,但运行着就死了。重新启动,没有第二个办法。
有几个可能会造成死循环: 1)循环逻辑错,这是最大的可能,检验你的循环边界, 可以用单步调试的方法,在每个可能的调用入口点及出口 点各置一个断点,先F9,如果有“死机”,再在调用体中 设置断点,F7 转向调用,然后可以在调用体中进行 F7、 F8、F9,相信你肯定能找到的。调试本来就是很辛苦的事, 不要想着有什么捷径。 2)内存错。这种情况一般较少见,但有时会有。程序没有 错,但运行着就死了。重新启动,没有第二个办法。
A Alex_Y Unregistered / Unconfirmed GUEST, unregistred user! 2001-09-16 #10 F5可以设置断点,F7是单步跟踪,F8是单步跟踪(不进入子函数), SHIFT + F7 是用于跟踪汇编代码 SHIFT + F8 是运行到此函数或过程结束处. F4 是运行到光标处. 然后可以选择你喜欢的方法自由跟踪.
F5可以设置断点,F7是单步跟踪,F8是单步跟踪(不进入子函数), SHIFT + F7 是用于跟踪汇编代码 SHIFT + F8 是运行到此函数或过程结束处. F4 是运行到光标处. 然后可以选择你喜欢的方法自由跟踪.
陈 陈冲伟 Unregistered / Unconfirmed GUEST, unregistred user! 2001-09-16 #13 多谢各位的帮助,并非是我不会跟踪。而是这个程序比较麻烦,它是一个读文件的程序, 当用户按下一个键时,它就自动读当前目录下的下一个文件,如果用户按键较慢,则一切运 行正常,但是如果用户按下一个键不放(相当于快速发送很多KeyPress消息),那么有时 (注意,这里是有时)程序会死掉。如果我跟到程序中去,那么相当于用户较慢地按键,程 序不会出现问题,因而也很难找到Bug。所以我想先不设置断点,让程序全速运行,然后出 现死锁后再判断引发死锁的代码,不知道是否可行,还请各位指教。
多谢各位的帮助,并非是我不会跟踪。而是这个程序比较麻烦,它是一个读文件的程序, 当用户按下一个键时,它就自动读当前目录下的下一个文件,如果用户按键较慢,则一切运 行正常,但是如果用户按下一个键不放(相当于快速发送很多KeyPress消息),那么有时 (注意,这里是有时)程序会死掉。如果我跟到程序中去,那么相当于用户较慢地按键,程 序不会出现问题,因而也很难找到Bug。所以我想先不设置断点,让程序全速运行,然后出 现死锁后再判断引发死锁的代码,不知道是否可行,还请各位指教。
F fossil Unregistered / Unconfirmed GUEST, unregistred user! 2001-09-16 #16 设置变量,在循环(并处理系统消息,如果变量有变化就执行 proc a ,变量复位)
M milesg Unregistered / Unconfirmed GUEST, unregistred user! 2001-09-16 #17 从你的叙述来看,有点类似以前的“中断程序”。 通常这类程序的编写规则应该是: 触发 -------------- 按键-------〉|读文件子程序| -------------- 在读文件子程序中要disable对按键事件的判别, 当子程序结束返回前才可enable对按键事件的判别, 否则很可能在读文件子程序中引发死锁。
从你的叙述来看,有点类似以前的“中断程序”。 通常这类程序的编写规则应该是: 触发 -------------- 按键-------〉|读文件子程序| -------------- 在读文件子程序中要disable对按键事件的判别, 当子程序结束返回前才可enable对按键事件的判别, 否则很可能在读文件子程序中引发死锁。
陈 陈冲伟 Unregistered / Unconfirmed GUEST, unregistred user! 2001-09-16 #18 to milesg: 我的程序中已经设置了标志位,防止重入消息处理子程序。
C cAkk Unregistered / Unconfirmed GUEST, unregistred user! 2001-09-17 #19 我想只要在四循环发生时,选择菜单“Run|Pause”即可进入四循环体内
B byrybye Unregistered / Unconfirmed GUEST, unregistred user! 2001-09-17 #20 你应该,做一个文件。 把你的操作记录下来,那就不用短点了