C#获取程序异常的牛逼方法
1、 传统获取错误信息代码
try
{
Bitmap bitmap = new Bitmap("pcb.jpg");
Bitmap bitmap2 = new Bitmap("循环.png");
bitmap2.Save("pcb.jpg");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message );
}
输出:
GDI+ 中发生一般性错误。
上面的代码在catch中返回的信息是:“GDI+ 中发生一般性错误”,从这个错误提示根本看不出来到底是啥错误,下面介绍一种牛逼的方法来获取程序究竟发生了什么具体错误:
2、 加强版获取错误信息代码
获取错误代码如下:
try
{
Bitmap bitmap = new Bitmap("pcb.jpg");
Bitmap bitmap2 = new Bitmap("循环.png");
bitmap2.Save("pcb.jpg");
}
catch (Exception ex)
{
int errorCode = Marshal.GetLastWin32Error();
Win32Exception win32Ex = new Win32Exception(errorCode);
Console.WriteLine("Error description: " +win32Ex.NativeErrorCode + "," + win32Ex.Message+ ","+ex.Message );
}
输出:
Error description: 32,另一个程序正在使用此文件,进程无法访问。,GDI+ 中发生一般性错误。
从上面的输出可以看出是说文件被占用,因为bitmap 没有释放导致,所以这个Marshal.GetLastWin32Error方法返回由上一个非托管函数返回的错误代码这个功能可以结合catch中的信息,这样我们获取程序具体错误的途径又增加了一个,更便于我们查找导致程序发生错误的具体原因。
3、正确代码
调用 bitmap.Dispose();可以释放对本地文件pcb.jpg的占用。
try
{
Bitmap bitmap = new Bitmap("pcb.jpg");
bitmap.Dispose();
Bitmap bitmap2 = new Bitmap("循环.png");
bitmap2.Save("pcb.jpg");
}
catch (Exception ex)
{
int errorCode = Marshal.GetLastWin32Error();
Win32Exception win32Ex = new Win32Exception(errorCode);
Console.WriteLine("Error description: " +win32Ex.NativeErrorCode + "," + win32Ex.Message+ ","+ex.Message );
}
原文地址:https://blog.csdn.net/qq_34059233/article/details/142420735
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!