如何阅读StackTrace?

问题描述 投票:1回答:1

我希望这个问题可以在SO的规则中存活下来,因为我搜索了很多,没有找到它的文档,有时会忽略它,但这促使我不理解问题和解决方案。 Exceptoion的StackeTrace有自己的描述问题的方式,是的,用一种人性化的语言,但是我不知道或者它来自哪里的符号和代码,这是我忽略的其中一个因为我不喜欢不明白它的意思,但我无法解决问题:

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

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

  1. 什么是HttpClientHandler及其所在位置:

在<35658e59c86d40bdbb2ef0bb34b4f0c7>

  1. 这被提到两次:

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

这是HttpClient类的内部代码吗?

如何了解StackTrace的大部分内容以了解异常?

c# exception stack-trace
1个回答
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。

© www.soinside.com 2019 - 2024. All rights reserved.