什么是展示我的全部的正确方法InnerException.
我发现我的一些InnerExceptions有另一个InnerException,而且非常深入.
会InnerException.ToString()做的工作,我还是我通过需要循环InnerExceptions,建立一个String有StringBuilder?
抛出异常时(在IDE中进行调试时),我有机会查看异常的详细信息:

但在代码中,如果我打电话,exception.ToString()我不会看到这些有用的细节:
System.Data.SqlClient.SqlException (0x80131904): Could not find stored procedure 'FetchActiveUsers'.
[...snip stack trace...]
Run Code Online (Sandbox Code Playgroud)
但Visual Studio有一些魔力可以将异常复制到剪贴板:

这给出了有用的细节:
System.Data.SqlClient.SqlException was unhandled by user code
Message=Could not find stored procedure 'FetchActiveUsers'.
Source=.Net SqlClient Data Provider
ErrorCode=-2146232060
Class=16
LineNumber=1
Number=2812
Procedure=""
Server=vader
State=62
StackTrace:
[...snip stack trace...]
InnerException:
Run Code Online (Sandbox Code Playgroud)
好吧,我想要那个!
会是什么内容:
String ExceptionToString(Exception ex)
{
//todo: Write useful routine
return ex.ToString();
}
Run Code Online (Sandbox Code Playgroud)
这可以实现同样的魔力.是否在某处内置了.NET功能?是否Exception有一个秘密的地方的方法将其转换为字符串?
我正在查看一些代码,我发现了e.ToString(),我想知道使用ToString()方法而不是.Message是否有区别?
阅读下面,听起来它返回更多信息.
.NET Compact Framework支持的ToString.覆盖.创建并返回当前异常的字符串表示形式.
.NET Compact Framework支持的消息.获取描述当前异常的消息.
到目前为止,每当我想显示我使用的代码抛出异常时:
try
{
// Code that may throw different exceptions
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
Run Code Online (Sandbox Code Playgroud)
我使用上面的代码主要是出于调试原因,以便查看异常的确切类型以及抛出异常的相应原因.
在我正在创建的项目中,我使用了几个try-catch子句,并且我想在出现异常时显示弹出消息,以使其更加"用户友好".通过"用户友好",我的意思是一条消息,它将隐藏当前使用上述代码显示的Null Reference Exception或Argument Out of Range Exception等短语.
但是,我仍然希望查看与创建消息的异常类型相关的信息.
有没有办法根据以前的需要格式化抛出异常的显示输出?
我正在开始一个新项目,并在思考我应该记录什么.日志文件仅用于帮助开发人员发现错误.用例是当抛出未处理的异常时,会向开发人员发送通知,该开发人员可以访问日志文件和堆栈跟踪.
我应该在日志文件中包含哪些内容?记录一切都不会起作用.我知道这很难说,因为答案可能需要对系统有深入的了解.所以我想我真的要求"最佳实践".请举例说明.
它还取决于应用程序类型,如桌面客户端应用程序,桌面服务器或Web服务器?
我目前正在记录错误,并希望获得最具描述性的详细信息.我知道我可以捕获许多不同类型的异常但是Exception.Message和之间有什么区别Exception.InnerException.Message?