如何阅读StackTrace?

时间:2017-12-31 11:21:55

标签: c# exception stack-trace

我希望这个问题可以在SO的规则中存活,因为我经常搜索,没有找到它的文档,有时会忽略它,但这促使我不理解问题和解决方案。 Exceptoion的StackeTrace有自己的描述问题的方式,是的,用人性化的语言,但是我不知道的符号和代码,或者它来自何处,这是我的其中之一被忽略,因为我不明白它说的是什么,但我无法解决问题:

  

在System.Net.Http.HttpClientHandler + d__63.MoveNext()   < 35658e59c86d40bdbb2ef0bb34b4f0c7>中的[0x004ab]:0   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   < 657aa8fea4454dc898a9e5f379c58734>中的[0x0000c]:0   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess   (System.Threading.Tasks.Task任务)[0x0003e] in   < 657aa8fea4454dc898a9e5f379c58734>:0 at   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification   (System.Threading.Tasks.Task任务)[0x00028] in   < 657aa8fea4454dc898a9e5f379c58734>:0 at   System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd   (System.Threading.Tasks.Task任务)[0x00008] in   < 657aa8fea4454dc898a9e5f379c58734>:0 at   System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1 + ConfiguredTaskAwaiter [TResult] .GetResult   ()[0x00000]在< 657aa8fea4454dc898a9e5f379c58734>:0 at   System.Net.Http.HttpClient + d__49.MoveNext()   < 35658e59c86d40bdbb2ef0bb34b4f0c7>中的[0x000ca]:0   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   < 657aa8fea4454dc898a9e5f379c58734>中的[0x0000c]:0   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess   (System.Threading.Tasks.Task任务)[0x0003e] in   < 657aa8fea4454dc898a9e5f379c58734>:0 at   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification   (System.Threading.Tasks.Task任务)[0x00028] in   < 657aa8fea4454dc898a9e5f379c58734>:0 at   System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd   (System.Threading.Tasks.Task任务)[0x00008] in   < 657aa8fea4454dc898a9e5f379c58734>:0 at   System.Runtime.CompilerServices.TaskAwaiter`1 [TResult] .GetResult()   [0x00000]在< 657aa8fea4454dc898a9e5f379c58734>中:0 at   PSProject.Helpers.Utility + d__15.MoveNext()[0x00136] in   d:\ PSProject \ PSProject \ PSProject \ PSProject \助手\ Utility.cs:212

当我尝试通过HttpClient.PostAsync从Wi-Fi网络通过网络服务获取数据而非移动数据(这是一个Xamarin应用)时,会抛出异常。 从这条痕迹我能理解什么? 例如:

  1. 什么是HttpClientHandler 它所在的位置:
  2.   

    in< 35658e59c86d40bdbb2ef0bb34b4f0c7>

    1. 这提到了两次:
    2.   

      从抛出异常的上一个位置开始的堆栈跟踪结束

      这是HttpClient类的内部代码吗?

      如何最大限度地了解StackTrace以了解异常?

1 个答案:

答案 0 :(得分:2)

堆栈跟踪器很复杂,因为您使用的是async/await。您不需要上述跟踪中的大部分信息。大多数情况下,您可以忽略错误代码以及与awaiter相关的任何内容。

找到未提及awaiter的第一个位置,大多数情况下,您将在那里找到一个行号。它主要是抛出你正在调查的Exception的位置。

在你的例子中就是这一行:

  

PSProject.Helpers.Utility + d__15.MoveNext()[0x00136]在D:\ PSProject \ PSProject \ PSProject \ PSProject \ Helpers \ Utility.cs:212

这是第一个未提及awaiter的位置。 Utility.cs 文件中引发Exception的行号是 212