调试.Assert导致我的应用程序退出



我创建了一个库,其中包含许多实用程序函数来执行一些任务,并将其放在它自己的DLL中。

在这个库中的所有方法中,我都放置了Debug。Assert语句用于验证应用程序的状态。

问题是,当Assert触发(条件为false)时,它呈现对话框,单击它上的"Abort"会导致使用该DLL的整个应用程序崩溃。

这提出了两个问题:

  1. 这可以避免吗?

  2. 为什么DLL会导致加载它的应用程序退出?这不是安全漏洞吗?

谢谢

调试。Assert不打算在发布代码中结束(因此'Debug':))。选择Abort意味着终止引发断言的进程。如果您选择忽略,它应该继续,并且无论哪种方式,这都不应该发生在作为调试的发布构建中。Assert将被剥离。

编辑:这是MSDN解释的链接:http://msdn.microsoft.com/en-us/library/e63efys0.aspx

如果你想抛出一个异常,为什么不直接抛出一个异常呢?

改变
Assert(var);

if(!var)
  throw new Exception("var was false");

断言将离开应用程序,断言在这里是为了保护你免受程序员的错误。如果一个函数永远不应该接收空指针,如果它接收空指针,那将是一个错误,那么断言将是正确的工具。

如果您想表达一个异常情况,那么异常就是您正在寻找的工具

最新更新