随笔-3  评论-12  文章-0  trackbacks-0

 

近日编写的程序中到处都用了的try...catch处理,但总是会静静地退出,从外部的进程查询它的退出码,结果是0xc0000417,上网一查,未知软件错误。

它是谁来抛出的异常?windows,C++库,用户代码?

我真没有抛出这样的异常,windows自己抛出的异常就应该不叫未知软件错误了,估计是C++框架抛出的。

那么怎么找呢?我直接到VS的安装目录去找0xc0000417,结果在ntstatus.h找到定义:

//
// MessageId: STATUS_INVALID_CRUNTIME_PARAMETER
//
// MessageText:
//
// An invalid parameter was passed to a C runtime function.
//
#define STATUS_INVALID_CRUNTIME_PARAMETER ((NTSTATUS)0xC0000417L)

原来是非法句柄错误,但我又没有用_set_invalid_parameter_handler设置处理回调函数。

这样C++框架发现了这一情况,就调用了_invoke_watson函数,它把UnhandledExceptionFilter重设

(导致程序一开始设置的UnhandledExceptionFilter不可用),然后调用默认的UnhandledExceptionFilter之后,

就TerminateProcess结束进程,这就是为什么程序总是静静地退出了。


百野燃气灶维修     老板燃气灶维修
posted on 2010-04-28 08:15 李立 阅读(764) 评论(1)  编辑 收藏 引用

评论:
# re: C++编程抛出0xc0000417错误代码 2010-12-22 11:13 | liyoongzan
恢复上次提交  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理