Visual Studio小贴士——加了Try-Catch也能自动定位到异常代码
Visual Studio的调试功能非常强大。当异常发生的时候,能够自动定位到异常发生的地方。但是如果你在代码外层显式的加上了Try-Catch异常捕获的时候,默认情况下,Visual Studio会直接跳到异常处理代码块,而不是出现异常的代码行。
namespace BreakOnException { class Program { static void Main(string[] args) { try { Program p = null; Console.WriteLine(p.GetHashCode()); } catch (System.Exception ex) { } } } }
上面的代码会抛出经典的NullReferrenceException。但是当你在调试状态下运行时,Visual Studio会将代码停在catch这一行,而不是Console.WriteLine这一行。
![]()
如果代码简单那倒无所谓,但是假想我们的代码是经过层层的函数调用,最外层却加了这么个Try-Catch,那么异常函数调用内抛出了异常,我们也很难定位到异常出错的代码(StackTrace也只能定位哪一个函数调用出错了)。
这个行为可以通过Debug菜单中的Exception….菜单进行设置。
![]()
打开此菜单,在CLR异常的Thrown列打上勾,那么以后遇到CLR的异常就不再是定位到用户处理代码了,而是直接停在抛出异常的代码上。这样可以大大方便我们调试程序的Bug。
![]()
你可能对下面的文章感兴趣

本博客遵循CC协议2.5,即署名-非商业性使用-相同方式共享
写作很辛苦,转载请注明作者以及原文链接~
如果你喜欢我的文章,你可以订阅我的博客:-D点击订阅我的文章



最新评论
这个错误应该是因为Java不支持命名组导致的,将(?.*)语 法改成(.*),然后后向引用的时候使用\1即可。 但是由于java还不支持平衡组,也就是压入弹出堆栈的操...
在Expresso工具上确实可以运行 ;我改成java正则表达式后(?s)<(?<Ht mlTag>[\\w]+)[^>]*\\s...
这得看具体场景,如果你的文件非常大,那么使用正则匹配可能效率 会明显不如自己写一个程序一行一行去统计来得高。但是至少这种方 式不用自己写代码。
支持喽!博客不错!
好办法,不过据说正则表达式性能不高