C#学习教程:在VisualStudio中以编程方式应用/停用断点VisualStudio项目的源代码?喜欢:尝试{FunctionThatThrowsErrors(objInscrutableParameters);}catch(Exceptionex){Log.LogTheError(ex);AddBreakPointToCallingFunction();这样,下次运行debug时,会自动在上次运行时出现的错误,在所有点上设置断点。我并不是说这是一种特别有用的调试方法。我只是想知道是否存在这种能力。你激励我对此大笑——谢谢你让我彻夜难眠。:)这是您可以做到的一种方法。VisualStudio有很好的断点支持。其中一个更酷的功能是您可以告诉它在遇到断点时运行VisualStudio宏。这些宏可以完全访问开发环境,即它们可以在键盘上手动执行任何操作,包括设置额外的断点。对此的解决方案是1)在程序中放置一个顶级try/catch以捕获所有异常,2)在运行宏的catch块中放置一个断点,以及3)让宏查看异常以查找从哪里来,然后设置断点。当您在调试器中运行它并发生异常时,您将在有问题的代码行处有一个新的断点。以这个示例程序为例:usingSystem;namespaceExceptionCallstack{classProgram{staticvoidMain(string[]args){try{func1();}catch(Exceptione){Console.WriteLine("Oops");控制台.ReadKey();}}staticvoidfunc1(){func2();}staticvoidfunc2(){func3();}staticvoidfunc3(){thrownewException("Boom!");}}}Targetisindebugger在运行时以编程方式在func3中设置断点并出现错误。为此,首先创建一个新的VisualStudio宏(我称之为SetBreakpointOnException)。将其粘贴到新模块MyDebuggerMacros或其他模块中:导入系统导入EnvDTE导入EnvDTE80导入EnvDTE90导入System.Diagnostics导入System.Text.RegularExpressions("e.StackTrace").ValuestackTrace=stackTrace.Trim(NewChar(){""""c})DimstackFramesAsString()=Regex.Split(stackTrace,"\r\n")Dimr作为NewRegex("^s+at.*in(?.+):line(?d+)$",RegexOptions.Multiline)DimmatchAsMatch=r.Match(stackFrames(0))DimfileAsString=match.Groups("file").ValueDimlineAsInteger=Integer.Parse(match.Groups("line").Value)DTE.Debugger.Breakpoints.Add("",file,line)EndSubEndModuleOnce这个宏到位,返回catch块,用F9设置断点。然后右键单击红色断点圆圈并选择“WhenHit...”。在结果对话框的底部有一个选项告诉它运行宏-下拉列表并选择您的宏。当您的应用程序抛出未处理的异常时,您现在应该获得新的断点。关于此的注意事项和警告:希望这有帮助!您可以调用System.Diagnostics.Debugger.Break()。您还可以告诉VisualStudio中断所有异常,甚至处理异常,方法是通过菜单转到调试->异常...并检查调试->异常...目前仅检查“用户未处理”。它并没有真正回答您的问题,但您可以根据使用Debug.Assert设置的条件使调试器中断。因此,不用说“下次我运行导致异常的函数时,中断”,您可以向函数添加断言,以便在条件不符合预期时中断。毕竟,仅仅因为上次抛出异常,函数并不能保证这次抛出异常。?我不认为你真的可以“添加断点”,但你可以调用System.Diagnostics.Debugger.Break()来指示调试器暂停执行以检查出了什么问题。此外,VisualBasic有一个名为Stop的关键字,它基本上充当断点并中断执行。以上是C#学习教程:Programmaticallyapply/deactivatebreakpointsinVisualStudio。如果对你有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络合集,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处:
