从用户的角度来说,当程序出现异常时只要有给点简单的提示就行.但从开发者的角度来说就需要非常详细的信息,这对追踪Bug很有用.异常相关的详细信息可以记录到日志文件中.这样你自己测试时比较方便点,而且做用户支持时也方便,如果用户碰到啥问题要他们把错误日志发过来就行.
异常处理语句通常的形式一般如下:
try
{
//some code
}
catch(Exception ex)
{
}
我们通常获取的提示信息是ex.Message,简单描述了下出现啥异常了.但ex里面还包括其他些详细的信息
ex.GetType().FullName.详细的异常名字,我们知道Exception是比较笼统的,还有些更详细的异常名字比如System.IndexOutOfRangeException
ex.Source 返回应用程序的名字
ex.TargetSite 返回是出异常的函数的名字
ex.StackTrace 这里面的信息比较多,有出错的函数名字,还有具体是哪一cs源文件中,并且详细到源代码中哪一行
除了这些信息外,有些时候可能还想知道版本号,程序运行的操作系统和硬件的相关信息.因为有时一些Bug可能只在某个操作系统中才出现.当然你能用其他方法知道,但通过写代码把这些信息收集起来更方便.
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();//获取程序的版本号
电脑软件,硬件相关信息的获取
using System.Management; //先add reference,找到System.Mangement,点OK
string msg = string.Empty ;
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT* From Win32_OperatingSystem");
ManagementObjectCollection queryCollection = query.Get();
foreach (ManagementBaseObject managementObject in queryCollection)
{
msg = managementObject["Caption"] + //操作系统名字,比如Microsoft Windows 7 Professional
managementObject["Version"] + //系统版本号,比如6.1.7601
managementObject["Manufacturer"] + //操作系统生产厂商,比如Microsoft Corporation
managementObject["csname"] + //电脑名,这个是自己随便取的
managementObject["WindowsDirectory"]; //系统安装目录,比如c:\Windows
}
query = new ManagementObjectSearcher("SELECT * From Win32_ComputerSystem");
queryCollection = query.Get();
foreach (ManagementObject managementObject in queryCollection)
{
msg += managementObject["Manufacturer"] + //电脑厂商,比如Dell Inc.
managementObject["model"] + //型号,比如OptiPlex 755
managementObject["SystemType"] + //cpu类型,比如x64-based PC,表示64位的cpu
managementObject["totalphysicalmemory"].ToString() + //内存大小
managementObject["Domain"] + //域名
managementObject["UserName"]; //电脑开机时的用户名
;
}
反正电脑软硬件相关的很多信息都可以通过类ManagementObjectSearcher去查看,比如硬盘,主板,网卡得一些信息