我正在调试一些代码,并且想要抛出一个错误而不实际为exception.throw提供代码。
当我正在调试并且代码行在函数内以黄色突出显示时,是否还有动态抛出一般异常?
这将节省我在调试会话期间的大量时间。
由于
答案 0 :(得分:1)
您是否在询问是否可以以编程方式导致调试器中断,如果是,则:
Debugger.Break();
如果要在该调试点抛出异常,如果已禁用优化构建,则可以就地编辑,并在其后插入throw new Exception();
语句,将执行点移动到该位置line,跳过该特定行,这将导致调试器跳转到catch。然后你可以删除刚刚插入的行。如果不插入一些实际代码来抛出异常,就无法做到这一点。
答案 1 :(得分:0)
我的建议是整理一个测试用例,由于输入数据,该测试用例保证程序会在您正在查看的位置抛出异常。
当可能抛出异常时,你只需要一个try / catch,所以必须在某个地方抛出 - 只是触发它的情况。
另一种方法是提供某种类型的模拟对象,该对象在相关代码行中调用,其唯一的工作就是抛出所需的异常。
答案 2 :(得分:0)
好的,我会回答我自己的问题,因为我真的认为这种功能应该包含在未来的.net IDE中。
想象一下调试代码并在步进时突出显示一段代码,右键单击然后选择抛出异常。下拉列表提供了预定义的异常,或者只是一般的新异常。这样,您可以更快地测试代码,而无需编写特定的测试用例。
我也不相信编写测试用例总是可行的。例如,假设我正在从Web服务请求数据。我想要捕获以下例外:SSL信任失败,连接被拒绝,找不到404资源。如果有办法编写这些测试用例,当您请求的服务不是您自己的时,我会感到惊讶。在这些情况下,想象一下,如果你可以介入,并且在所需的点,右键单击,选择抛出新异常,那么会有多好 - 然后通过对话框选择所需的确切类型的异常。 。在这种情况下,您在调试模式下运行一次代码,每次要测试新的异常类型时,只需执行右键单击操作。无需停止/启动调试器或在整个地方编码任何临时抛出异常,最终需要出现在生产版本中。
我还要提到你也应该能够退出捕获部分,据我所知目前这是不可能的。
无论如何,据我所知,在动态调试时触发这样的异常的最佳方法是将调试位置拖放到以前从未运行过的代码依赖的地方,从而制作你丢弃的当前代码行无效。这是我知道如何做到这一点的唯一方法,所以如果你知道其他任何方式,请留下更好的答案。
说明我的观点
如果你没有运行第1行,通过将调试器拖放到第2行,那么line2现在会抛出一个异常,因为现在该目录不存在,如果代码运行正常就会有。
哈哈 - 如果我在VS团队工作,那么开发人员会更开心。