当前位置: 首页 > 编程语言 > C#

我能否以编程方式启用-禁用异常中断?Share

时间:2023-04-10 23:13:40 C#

我可以以编程方式启用/禁用异常中断吗?我希望能够在调试时中断异常...就像在VisualStudio2008的菜单调试/异常对话框中一样,除了我的程序在到达我希望调试的位之前有许多有效的异常。因此,不是每次都通过对话框手动启用和禁用它,我可以使用#pragma或其他东西使其自动化,所以它只发生在特定的代码段中?接近这个的唯一方法是将DebuggerNonUserCodeAttribute放在您的方法上。这将确保标记方法中的任何异常都不会导致异常中断。在这里解释得很好......这是一个方法的属性,它告诉调试器“与我无关'。不是我的代码!”。容易上当受骗的调试器会信任你并且不会破坏方法:使用这个属性会导致调试器完全跳过该方法,即使你正在单步执行代码;发生并随后在方法中捕获的异常将不会进入调试器设备。它会将其视为对框架程序集的调用,如果未处理异常,则会在调用该方法的代码中将其报告到调度堆栈的上一级。代码示例:publicclassFoo{[DebuggerNonUserCode]publicvoidMethodThatThrowsException(){...{}条件断点呢?如果我理解正确的话,只有当某个变量或表达式的计算结果为真时才能触发断点。将trycatch块包装在#ifDEBUGpublicvoidFoo(){#ifDEBUGtry#endif{//Codegoeshere}#ifDEBUGcatch(Exceptione){//Execptioncodehere}#endif}我喜欢花括号保留在#if之外,以将代码保持在调试内外的相同范围内。如果你仍然想这样做但需要更多细节,你可以这样做try{//code}catch(FileNotFoundExceptione){//NormalCodehere#ifDEBUG//MoreDetailhere#endif}#ifDEBUGcatch(Exceptione){//handelotherexceptionshere}#endif这对你来说太晚了,但这是我经常尝试教人们谨慎使用异常的最大原因。仅当发生灾难性事件并且合理继续的能力消失时才使用异常。在调试程序时,我经常翻阅FirstChanceExceptions(Debug->Exceptions)来调试应用程序。如果发生了很多异常,则很难找到“错误”的地方。此外,它还会导致一些反模式,如臭名昭著的“接球投掷”,并混淆了真正的问题。有关详细信息,请参阅我关于该主题的博客文章。就您的问题而言,您可以仅为特定类型的异常启用首次调试机会。除非其他异常属于同一类型,否则这应该可以正常工作。您还可以使用断言而不是断点。例如,如果您只想在第二次调用该函数时在循环的第5次迭代时中断,您可以这样做:boolbreakLoop=false;...工作();//不会在第5次迭代时中断.breakLoop=true;工作();//将在第5次迭代时中断。...publicvoidWork(){for(inti=0;i所以第一次调用Work时,虽然breakLoop为false,但是循环会在没有断言的情况下运行,第二次循环会break。以上是C#学习教程:CanIprogrammaticallyenable/disableexceptioninterrupts?如果分享的所有内容对您有用,需要了解更多C#学习教程,希望您多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: