【问题标题】:How to read the StackTrace?如何阅读 StackTrace?
【发布时间】:2018-06-11 00:58:35
【问题描述】:

我希望这个问题能够在 SO 的规则中幸存下来,因为我搜索了很多,没有找到关于它的文档,有时甚至忽略了它,但这让我既不理解问题也不理解解决方案。 Exceptionoion 的StackeTrace 有自己的描述问题的方式,是的,用一种对人类友好的语言,但带有我不知道或它来自哪里的符号和代码,这是我忽略的其中之一,因为我不明白它在说什么,但我无法解决问题:

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

当我尝试通过HttpClient.PostAsync 从 Wi-Fi 网络而不是移动数据(这是 Xamarin 应用程序)获取数据时,会引发异常。 从那个痕迹我能理解什么? 例如:

  1. 什么是HttpClientHandler 以及它的位置:

  1. 这被提到了两次:

从先前抛出异常的位置结束堆栈跟踪

这是HttpClient 类的内部代码吗?

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

【问题讨论】:

  • 问题 1 的答案是:HttpClientHandler 是 HTTP 处理程序实现的一个类。
  • 你在用单声道吗?
  • 有关这些行的一些信息可以在Environment,StackTraceStackTrace 类示例中找到
  • @ilansch 抱歉,我刚开始使用 Xamarin,对单声道不太了解(我认为它完全是抽象的)

标签: c# exception stack-trace


【解决方案1】:

堆栈跟踪器很复杂,因为您使用的是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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-19
    • 2011-09-08
    • 2011-01-19
    • 2012-01-16
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多