我创建了一个包含许多实用程序函数的库来执行某些任务并将其放在它自己的DLL中。
在整个库中的方法中,我放置了Debug.Assert语句来验证应用程序的状态。
问题是,当Assert正在触发时(条件为false),它会显示对话框,单击“Abort”会导致使用此DLL的整个应用程序崩溃。
这提出了两个问题:
这可以避免吗?我希望这可以在不退出应用程序的情况下抛出异常。
为什么DLL会导致加载它的应用程序退出?这不是安全漏洞吗?
由于
答案 0 :(得分:4)
Debug.Assert不打算以发布代码结束(因此'Debug':))。选择Abort意味着杀死引发断言的进程。如果选择Ignore,它应该继续,并且无论哪种方式都不应该在Release版本中发生,因为Debug.Assert将被剥离。
编辑:以下是MSDN说明的链接:http://msdn.microsoft.com/en-us/library/e63efys0.aspx
答案 1 :(得分:1)
如果你想抛出异常,为什么不抛出异常?
更改
Assert(var);
到
if(!var)
throw new Exception("var was false");
断言将离开应用程序,断言是为了保护您免受编码器的错误。如果一个函数永远不会收到一个空指针,如果它确实是一个错误,那么一个断言将是正确的工具。
如果您想表达异常情况,则异常是您正在寻找的工具