如何阅读StackTrace?

我希望这个问题可以在SO的规则中存活下来,因为我搜索了很多,没有找到它的文档,有时会忽略它,但这促使我不理解问题和解决方案 . Exceptoion的 StackeTrace 有自己的描述问题的方式,是的,用人性化的语言,但用符号和代码,我不理解它的内容,但我无法解决问题:

at 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.ConfiguredTaskAwaitable1 ConfiguredTaskAwaiter [TResult] .GetResult()[0x00000] in <657aa8fea4454dc898a9e5f379c58734>:0 at System.Net.Http.HttpClient d__49.MoveNext()[0x000ca] in <35658e59c86d40b dbb2ef0bb34b4f0c7>: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.TaskAwaiter1 [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 从Web服务获取数据而不是移动数据(这是一个Xamarin应用程序)时,抛出异常 . 从这条痕迹我能理解什么?例如:

  • 什么是 HttpClientHandler 及其所在位置:

在<35658e59c86d40bdbb2ef0bb34b4f0c7>

  • 这提到了两次:

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

这是 HttpClient 类的内部代码吗?

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

回答(1)

3 years ago

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