2011-04-13 57 views
1

我创建了一个包含许多实用程序函数的库来执行某些任务并将其放入它自己的DLL中。Debug.Assert正在导致我的应用程序退出

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

问题是,当Assert被触发(条件为false)时,它会显示对话框,单击“Abort”就会导致使用此DLL的整个应用程序崩溃。

这就带来两个问题:

  1. 这能避免?我希望这会抛出一个异常,而不会退出应用程序。

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

由于

回答

1

如果你想有一个异常抛出,你为什么不只是抛出一个异常?

变化

Assert(var); 

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

断言将离开应用程序,断言来这里是为了保护你从编码器的错误。如果一个函数永远不会收到一个空指针,如果它确实是一个错误,那么一个断言就是正确的工具。

如果你想表达的exceptionnal情况,而不是例外是你正在寻找

+0

感谢您的评论的工具。我仍然很难区分异常可能适合何时以及何时断言。 – 2011-04-13 07:28:13

+0

@liortal作为一个经验法则,我通常为程序员使用断言错误。把它想成合同。 “如果你使用我的函数,请不要使用空指针”。这样,如果它发生了,它会很快失败(这很好),并且在调试期间(这更好)。例外情况通常是针对可能发生的特殊情况。你通常想从异常中恢复,而断言是编程错误,你想尽快修复它们。 – Drahakar 2011-04-13 07:35:06

4

的Debug.Assert的并不意在释放码(因此 '调试' :))来结束。选择中止意味着终止引发断言的进程。如果您选择忽略,它应该继续,并且无论哪种方式,这不应该在发布版本中发生,因为Debug.Assert将被删除。

编辑:这里有一个链接到MSDN解释:http://msdn.microsoft.com/en-us/library/e63efys0.aspx