在什么情况下TRY-CATCH捕获不到异常?

抬头看路 2001-05-28 02:29:00
有一段代码如下:
try
{
if(StrToDateTime(line.SubString(1, line.Pos("|") - 1)) > ThreeDaysBefore)
{
temp = Log->Items->Add();
temp->Caption = line.SubString(1, line.Pos("|") - 1);
temp->SubItems->Add(line.SubString(line.Pos("|") + 1, line.Length() - line.Pos("|")));
}
}
catch(...)
{
continue;
}
当LINE = "26 9:20:26|-----------------------------"时没有跳到continue.
...全文
758 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
孩皮妞野 2001-05-28
  • 打赏
  • 举报
回复
tools/debug options
抬头看路 2001-05-28
  • 打赏
  • 举报
回复
对,我加continue是为了能清楚的看到他停下。
还是不行。
孩皮妞野 2001-05-28
  • 打赏
  • 举报
回复
把StrToDateTime(line.SubString(1, line.Pos("¦") - 1));
写成,
String sTmp = line.SubString(1,line.Pos("1") -1);
StrToDateTime(sTmp);


在 continue;前面加上 static i=0;
i++;



加上breakpoint, 单步调试以下,


btw:
TDateTime不是integer,

ThreeDaysBefore--;
ThreeDaysBefore--;
ThreeDaysBefore--;

可能比 ThreeDaysBefore+=3; 更大更慢!


catch(...){
}
就可以了, continue不是必需的。
抬头看路 2001-05-28
  • 打赏
  • 举报
回复
to ALAN
你写的那段在我这里也不行,bcb中有没有能改变编译器动作的选项?
抬头看路 2001-05-28
  • 打赏
  • 举报
回复
帮忙看看。
AnsiString FileName = ChangeFileExt(Application->ExeName, ".LOG"),line;
TDateTime ThreeDaysBefore = Now();

ThreeDaysBefore--;
ThreeDaysBefore--;
ThreeDaysBefore--;

char buff[256];
TListItem *temp = NULL;
if(!FileExists(FileName))
{
return;
}
ifstream inf(FileName.c_str());
while(!inf.eof())
{
inf.getline(buff,256);
line = buff;
if(line == "")
continue;
try
{
StrToDateTime(line.SubString(1, line.Pos("|") - 1));//这句发生异常
/*if(StrToDateTime(line.SubString(1, line.Pos("|") - 1)) > ThreeDaysBefore)
{
temp = Log->Items->Add();
temp->Caption = line.SubString(1, line.Pos("|") - 1);
temp->SubItems->Add(line.SubString(line.Pos("|") + 1, line.Length() - line.Pos("|")));
}*/
}
catch(...)
{
continue;//没跳到这句
}
}

if(temp != NULL)//没跳到这句
{
TPoint Position = temp->GetPosition();
int x = Position.x,y = Position.y;

Log->Scroll(x, y);
}
inf.close();
孩皮妞野 2001-05-28
  • 打赏
  • 举报
回复
有这样一种情况, VCL的错误捕捉后不能再次throw,

形如:
try{
cat_killer();
}
catch(EImpotent& e){
faint();
throw;
}

达不到预期效果!
孩皮妞野 2001-05-28
  • 打赏
  • 举报
回复
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for(;;){
try
{
StrToDateTime("26 9:20:26");
// if(StrToDateTime("26 9:20:26") > ThreeDaysBefore)
// {
// temp = Log->Items->Add();
// temp->Caption = line.SubString(1, line.Pos("|") - 1);
// temp->SubItems->Add(line.SubString(line.Pos("|") + 1, line.Length() - line.Pos("|")));
// }
}
catch(...)
{
//ShowMessage("AAA");
continue;
}
}

}

错误被正常捕捉。
kimryo 2001-05-28
  • 打赏
  • 举报
回复
将StrToDateTime(line.SubString(1, line.Pos("¦") - 1)) 写到if的外面试试。
抬头看路 2001-05-28
  • 打赏
  • 举报
回复
当然会产生异常,“26 9:20:26”不是合法的DATETIME格式,转不过来,不信你们试试。
这只是一部分代码。
kimryo 2001-05-28
  • 打赏
  • 举报
回复
错!错!哎,最近很霉,人都霉昏了。


将catch中的内容写成Exception试试。要不就是你的StrToDateTime函数根本就没有产生错误。
kimryo 2001-05-28
  • 打赏
  • 举报
回复
好像有问题吧?你的contiune应该写在if里面才行啊!
夭夭 2001-05-28
  • 打赏
  • 举报
回复
up
这会有什么异常?
抬头看路 2001-05-28
  • 打赏
  • 举报
回复
帮帮忙

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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