对于异常,我们经常用try-catch语句来处理,一种常见的方式是在catch语句块用MessageBox.Show("异常")这种弹窗的方式来报告异常。但是有些时候,有些异常发生时我们不希望弹窗干扰用户,只是想要打印出异常信息查找原因、分析调试而已。

这时候常用的方法有:打印log将异常信息保存到文本中、将异常信息输出到可显示文本的控件中、将异常打印到“输出”窗口中。

其中涉及的关键问题是:如何快速定位异常所在的位置。如果可以输出异常所在的行数其实就可以很好解决这一问题了。 

设计一个异常如下:点击button1,执行一个“除以0”的异常:

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace Windows_控制台输出
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
int i = ; try
{
25 int j = 10/i;
}
catch (Exception ex)
{
string str = ex.StackTrace;
Console.WriteLine(str);
} }
}
}

控制台输出窗口打印:

   在 Windows_控制台输出.Form1.button1_Click(Object sender, EventArgs e) 位置 c:\Users\happy xia\Documents\Visual Studio 2013\Projects\Windows_控制台输出\Windows_控制台输出\Form1.cs:行号 25

它表明异常出现在Form1.button1_Click方法中,出现在文件Form1.cs中,并给出了该文件的全路径,最后显示出现的行数为25。

其实我们最想得到的信息是:Form1.cs:行号 25。(注意:如果Visual Studio选择的语言是英文,那么这里的“行号”一词是对应的英文)

如果考虑不同语言环境的兼容性,以字符串“行号”为标记截取字符串的话,并不是最好的方式。此时可以考虑以“cs:”为标记,但是这不易准确得到发生异常的文件名(这里是Form1.cs)。

我们可以考虑以最后一个反斜杠“\”作为截取的标记。此时程序为:

 private void button1_Click(object sender, EventArgs e)
{
int i = ; try
{
int j = /i;
}
catch (Exception ex)
{
string str = ex.StackTrace;
Console.WriteLine(str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) );
} }

控制台输出窗口打印:

Form1.cs:行号 25

如果要顺带输出异常的内容的话,代码如下:

 private void button1_Click(object sender, EventArgs e)
{
int i = ; try
{
int j = /i;
}
catch (Exception ex)
{
string str = ex.StackTrace;
Console.WriteLine("异常: " + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + "--------" + ex.Message);
} }

控制台输出窗口打印:

异常:  Form1.cs:行号 25--------尝试除以零。

最新文章

  1. javascript中this指针探讨
  2. cookie的使用
  3. js中substr与substring的差别
  4. Asp.net封装js的类
  5. tarjan 算法讲解(转)
  6. Linux内核启动分析
  7. discuzx3.2伪静态
  8. 大家帮我测试下,IOCP服务端和客户端交互
  9. office编程必不可少
  10. 【LeetCode】118. Pascal's Triangle
  11. StringBUffer和StringBuilder详解
  12. mongo connections url string 的问题
  13. 安装MySQL8.0 遇到的3个小错误
  14. CentOS 7 lnmp环境配置laravel项目的问题总结!
  15. 前端-----css(1)
  16. cf14d 树的直径,枚举删边
  17. 解决 docker 报错: Error starting daemon: error initializing graphdriver: backing file system is unsupported for this graph driver
  18. Tomcat线程数与处理速度的关系
  19. java程序员面试交流项目经验
  20. J - S-Nim

热门文章

  1. ActiveMQ的多种部署方式--ActiveMQ学习之二
  2. Java-Runoob:Java 方法
  3. SpringBoot中RedisTemplate订阅发布对象
  4. shelve模块(超级好用~!)
  5. mysql 优化(2)
  6. 下载pubmed数据
  7. Nginx压力测试工具之WebBench
  8. 第十章 消息驱动的微服务: Spring Cloud Stream
  9. Tkinter Text(文本)
  10. CentOS7修改ssh端口