执行与单步执行会不一样?(50分)

  • 主题发起人 主题发起人 Teikini
  • 开始时间 开始时间
T

Teikini

Unregistered / Unconfirmed
GUEST, unregistred user!
各位评评理:
我在执行程序时,出现这样的错误:access violation at .......
于是我单步执行(F8),竟然过去了,没错! 想不通两者有何区别?
大家给论论.
至于那个程序很长, 用到了ORACLE的SQL查询, 及第三方控件,
但不至于于有错.
 
是有这种情况的. 这跟你设置的调试参数可能有关. 第三方控件用了之后,很
容易出这种问题.
 
可是我并没有设置调试参数啊, 两次的操作完全一样.
 
单步执行时, DELPHI有两种对出错的设置: run handled, run unhandled.
 
这种设置在哪儿? 有何区别?
多谢.
 
wuyi所说的,应该是指对Exception的handle吧,对这条题目可能意义不大。
应该是指针错误,又因为单步执行时和连续执行的内存镜象不完全一致。

或者有什么时序上的错误,比如说你想调用尚未建立的什么对象,单步时时间充裕,
这个对象或指针已经存在了,就调不出来了。

这时候最好是写log文件。或者弹messagebox吧。
 
曹:
我发现出错是在一个循环时, 如下:
...
for iLoop := 1 to iMaxRow do
begin
spd_Shohin.celText[iLoop,1] := .......
spd_Shohin.celText[iLoop,2] := .......
...
end;
...
spd_Shihin是第三方控件, 类似于DBGRID, 象一个表格.
当循环开始时就出错, 如果我在上面的end前加入一个showmessage,
则可以多显示一行,再出错.
你讲的"写log文件。或者弹messagebox吧。" , 能讲得详细点吗?
 
我也碰到过这种情况,当时是因为做一些异步操作,
完成一些操作需要一些时间,而程序继续执行,就出错了
例如:
a;b;c;三句语句,单步,没问题,直接运行到b出错,
在b语句前加上 processmessage语句试试看
我是这么解决我的问题的,不知道能否解决你的问题
 
hehe, 这种现象是因为你程序处理需要时间, 如打开数据库, 查询等等, 而你在
运行时没有给他足够的时间处理完, 就会出错. 而单步执行有足够时间处理, 那么
执行到原来出错的地方时就没有问题了.
 
有时候出错的地方并不是程序调试时中断的地方, 我曾经因为
一个指针没有new就使用,结果运行到了一个根本不可能出错的
位置发生了access violation.
没有new的指针一般当时都不会出错,它只是占用了别人的内存
地址而已,当被占用的变量使用时才会出错.

所以,仔细检查你的代码,特别是指针赋值的地方,看看是否已经
new过了.
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部