我有一些代码在一个特定的行上生成了大量的ArgumentExceptions(这是在不同的开发人员的代码中,所以我不能只改变它),然后被适当地捕获和处理。
我正在尝试调试在代码的不同部分发生的ArgumentExceptions(然后被捕获和处理,所以我不能只查看未处理的异常)。
是否有某种方法可以忽略源自该特定其他代码行的ArgumentExceptions,同时仍然打破其他地方抛出的ArgumentExceptions?
答案 0 :(得分:39)
您可能能够这样做,但这取决于您要调试的代码相对于其他开发人员代码的位置,以及您是否可以修改(但不提交更改)代码。< / p>
您要做的第一件事是,至少暂时,转到菜单工具 - &gt; 选项 - &gt;在Visual Studio中调试,勾选“Just My Code”框。我认为即使在Express版本中也可以使用它,但它可能不是,如果它不适合你,我担心我要说的其他内容可能无济于事。
无论如何,一旦你勾选了这个,你就不会再看到那些不是“你的”代码的违规通知。这意味着来自不在.sln中的程序集的代码,或来自[DebuggerNonUserCode]
的{{1}}属性标记的代码。我通常做的是用System.Diagnostics
临时修饰有问题的方法,直到我完成调试我需要调试的内容,然后在检入源控件之前还原这些更改。
它并不像我想的那样优雅(我喜欢“永远不会在这个网站上再次突破”复选框中的异常助手),但它总比没有好。
我相信可能有其他调试器设置可以与“Just My Code”的工作原理相互作用,所以如果这对您不起作用,请告诉我,我会尝试更准确地了解我的设置看起来就像我这样做。
答案 1 :(得分:4)
如果你在谈论“Break On Throw”异常功能,那么就没有了。它严格来说只是一种基于类型的功能,并且没有任何方法可以控制代码的哪个部分抛出异常。
最好的办法就是在所有投掷或暂停的线路上放置断点,从您关注的地方抛出异常。
答案 2 :(得分:2)
如果您知道如何调用它,我会在您的代码中设置断点,然后从那里进入(F11)。你也可以打电话给程序员,直到他们修复他们的代码,这会让你感觉更好(除非你是一个和平主义者),也许他们的代码中不会有这么多的ArgumentExceptions(这可能会让你感觉更好即使你是和平主义者。)
答案 3 :(得分:1)
听起来像使用异常作为流控制。如果您尝试调试的那个稍后出现在程序中,您可以稍后尝试附加调试器,或者您可以等到程序运行后,在抛出ArgumentException时打开它。
尝试限制范围 - 如果你感兴趣的异常派生自但不完全是ArgumentException,那么就打破那个。
告诉其他开发者修复他的代码。
编辑:在.NET 4中,您可以将处理程序附加到AppDomain.FirstChanceException事件,过滤掉非ArgumentException异常,并根据调用堆栈过滤掉坏的。 / p>
答案 4 :(得分:0)
评论中的链接很棒。
我认为条件断点是你在这里寻找的。您可以通过右键单击断点并单击Condition ...菜单项来执行此操作。