c++异常捕获的疑问

jiqiang01234 2011-09-26 09:59:26

bool CADOBase::ExecuteCommand(const _bstr_t& CmdText, CSafeLogSize* log)
{
try
{
VARIANT affect;
affect.vt = VT_I4;
affect.lVal = adAffectCurrent;
if (log)
{
log->Write("%s", (LPCSTR)CmdText);
}
m_pConnection->Execute(CmdText, &affect, adCmdText);
if (log)
{
log->Write("调用Execute后");
}
}
catch (_com_error& e)
{
UNREFERENCED_PARAMETER(e);

if (log)
{
log->Write("%s", (LPCSTR)e.Description());
}
return false;
}
catch(...)
{
if (log)
{
log->Write("不知名异常");
}
return false;
}

return true;
}


现在的现象是,红色部分已经执行,也就是日志只到了这里,而且日志中记录的数据也是正常的。但是之后程序就直接退出了,因为是服务端程序,只能看日志。可问题是,异常捕捉不到,没有留下一点痕迹。vc2005编译的,而且启动了/Eha。
...全文
182 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiqiang01234 2011-09-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 q191201771 的回复:]
楼主是用ADO 连数据库吧

你可以在Execute前判断下m_pConnection的State
[/Quote]
是ado连接的,如果m_pConnection有问题,catch(_com_error& e)应该会被调用,但却没有
jiqiang01234 2011-09-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mougaidong 的回复:]
要捕获到相应的异常,必须确认try块中有或者包含有throw语句,异常是人为抛出的,不是程序能自动抛出的。
[/Quote]
我是用/EHa编译的,try..catch应该相当于操作系统的SEH的__try..__except。或许我的理解有误?
jiqiang01234 2011-09-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yakeezhao 的回复:]
如果屏蔽掉log->Write语句还会出异常吗?也就是说log->Write语句会有抛出异常的可能吗?
[/Quote]

之前这个函数是没有日志的,日志记录在函数外面,但也是这种现象。所以才把日志放到了函数里
就想叫yoko 2011-09-26
  • 打赏
  • 举报
回复
楼主是用ADO 连数据库吧

你可以在Execute前判断下m_pConnection的State
康斯坦汀 2011-09-26
  • 打赏
  • 举报
回复
写日志的方式不对吧,你这里日志本身也是一个对象,当发生异常时可能会被破坏,因为
C++产生异常时会调用析构函数,所以不是异常后的代码没被执行,而是log这个对象被析构了。
写日志应该用静态类和方法,才能在出现异常时执行。以上个人的估计,供参考。
turing-complete 2011-09-26
  • 打赏
  • 举报
回复
要捕获到相应的异常,必须确认try块中有或者包含有throw语句,异常是人为抛出的,不是程序能自动抛出的。
rendao0563 2011-09-26
  • 打赏
  • 举报
回复
别自己折腾这个了. 谷歌有个breakpad. 可以去我空间下载 http://download.csdn.net/user/rendao0563
yakeezhao 2011-09-26
  • 打赏
  • 举报
回复
如果屏蔽掉log->Write语句还会出异常吗?也就是说log->Write语句会有抛出异常的可能吗?

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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