非正常错误,在loadResString处出错
时间:2011-08-22
来源:互联网
我把程序的错误分为正常错误与非正常错误;所谓正常错误是指自己写的代码的逻辑错误,在delphi调试中可以明显的找到自己错处,而非正常错误就是指在程序代码中找不到的错误。比如说,编译运行程序时,有时出错时,会发现程序运行到了以前写的单元代码处,而在本程序中即根本没有调用该单元?这个问题怎么解决?
比如说我现在遇到的问题,在用ClientSocket/ServerSocket写得程序中,总是会不定地方的loadResString处出现非法访问地址错误,而我的代码中根本没有调用loadResString函数,程序运行一出错,在view cpu中却大多定位到loadResString处,这是什么原因?
比如说,在代码中, temSen.sLocalIP:=Socket.RemoteAddress; 这句出错,我在view cpu 跟踪了很长很长的一段代码,最后也是定位到 loadResString出错,我却找不到原因?我确定Socket,temSen都是没问题的;怎么解决?我现在的运行的程序,一运行出错,都会定位到loadResString,为什么?
比如说,运行程序时,当运行一个函数后,比如
procedure TfrmXJTran.FormCreate(Sender: TObject);
var
fName,sLine:string;
MyIni: TIniFile;
i,j:integer;
bResult:boolean;
IPPara: PIPPara_Record;
begin
fName:=ExtractFilePath(ParamStr(0))+'XJTran.ini';
MyIni := TIniFile.Create(fName);
m_sport:=MyIni.ReadString('代理服务器', '端口号', '80');
bResult:=True;
i:=0;
IPParaList.PNextIPPara:=nil;
IPPara:=@IPParaList;
while bResult do //读取IP对应表
begin
sLine:='IP对应表'+inttostr(i+1);
IPPara.sLocalIP:=trim(MyIni.ReadString(trim(sLine), '本地IP', ''));
IPPara.sRemoteIP:=trim(MyIni.ReadString(trim(sLine), '远程IP', ''));
IPPara.sRemoteport:=trim(MyIni.ReadString(trim(sLine), '远程端口', ''));
if (IPPara.sLocalIP='') or (IPPara.sRemoteIP='') or (IPPara.sRemoteport='') then
begin
bResult:=False;
Break;
end;
inc(i);
if i>0 then //增加一个记录
begin
GetMem(IPPara.PNextIPPara,Sizeof(IPPara_Record));
IPPara:=IPPara.PNextIPPara;
IPPara.PNextIPPara:=nil;
end;
end;
MyIni.Free;
m_Session.CSocket:=nil;
m_Session.Request_Data:=nil;
m_Session.CurSocket:=nil;
Service_Enabled:=false;
ServerSocket.Port:=strtoint(m_sport);
try
ServerSocket.Active:=true;
except
Showmessage('启动服务器失败!');
application.Terminate;
end;
m_Isession:=0;//会话数
end;
运行完程序后,出会出现非法访问地址错误,当我把程序代码删除的只剩m_Isession:=0;//会话数这句,运行完程序后仍然会出错,把程序其它代码,(本函数外的其它代码),也基本删除光,确保没有出现自己的原因使程序出错,运行后,程序还是出错?这是什么原因?
写程序,最怕就是遇到这种问题。都不知怎么下手,各路高手,可不可以共享一下,平时遇到这类问题都是如何解决的?可不可把遇到的各类非正常错误列举出来,并提供解决之道,大家共同学习,共同进步?列出来的都有分,不够再加!
比如说我现在遇到的问题,在用ClientSocket/ServerSocket写得程序中,总是会不定地方的loadResString处出现非法访问地址错误,而我的代码中根本没有调用loadResString函数,程序运行一出错,在view cpu中却大多定位到loadResString处,这是什么原因?
比如说,在代码中, temSen.sLocalIP:=Socket.RemoteAddress; 这句出错,我在view cpu 跟踪了很长很长的一段代码,最后也是定位到 loadResString出错,我却找不到原因?我确定Socket,temSen都是没问题的;怎么解决?我现在的运行的程序,一运行出错,都会定位到loadResString,为什么?
比如说,运行程序时,当运行一个函数后,比如
procedure TfrmXJTran.FormCreate(Sender: TObject);
var
fName,sLine:string;
MyIni: TIniFile;
i,j:integer;
bResult:boolean;
IPPara: PIPPara_Record;
begin
fName:=ExtractFilePath(ParamStr(0))+'XJTran.ini';
MyIni := TIniFile.Create(fName);
m_sport:=MyIni.ReadString('代理服务器', '端口号', '80');
bResult:=True;
i:=0;
IPParaList.PNextIPPara:=nil;
IPPara:=@IPParaList;
while bResult do //读取IP对应表
begin
sLine:='IP对应表'+inttostr(i+1);
IPPara.sLocalIP:=trim(MyIni.ReadString(trim(sLine), '本地IP', ''));
IPPara.sRemoteIP:=trim(MyIni.ReadString(trim(sLine), '远程IP', ''));
IPPara.sRemoteport:=trim(MyIni.ReadString(trim(sLine), '远程端口', ''));
if (IPPara.sLocalIP='') or (IPPara.sRemoteIP='') or (IPPara.sRemoteport='') then
begin
bResult:=False;
Break;
end;
inc(i);
if i>0 then //增加一个记录
begin
GetMem(IPPara.PNextIPPara,Sizeof(IPPara_Record));
IPPara:=IPPara.PNextIPPara;
IPPara.PNextIPPara:=nil;
end;
end;
MyIni.Free;
m_Session.CSocket:=nil;
m_Session.Request_Data:=nil;
m_Session.CurSocket:=nil;
Service_Enabled:=false;
ServerSocket.Port:=strtoint(m_sport);
try
ServerSocket.Active:=true;
except
Showmessage('启动服务器失败!');
application.Terminate;
end;
m_Isession:=0;//会话数
end;
运行完程序后,出会出现非法访问地址错误,当我把程序代码删除的只剩m_Isession:=0;//会话数这句,运行完程序后仍然会出错,把程序其它代码,(本函数外的其它代码),也基本删除光,确保没有出现自己的原因使程序出错,运行后,程序还是出错?这是什么原因?
写程序,最怕就是遇到这种问题。都不知怎么下手,各路高手,可不可以共享一下,平时遇到这类问题都是如何解决的?可不可把遇到的各类非正常错误列举出来,并提供解决之道,大家共同学习,共同进步?列出来的都有分,不够再加!
作者: mhhaifeng 发布时间: 2011-08-22
怎么没人回应? 都没遇到过?
作者: mhhaifeng 发布时间: 2011-08-22
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28