gpt4 book ai didi

c# - 在 visual studio 中调试异步 C#;按预期打破异常

转载 作者:太空宇宙 更新时间:2023-11-03 19:39:44 26 4
gpt4 key购买 nike

我正在努力弄清楚如何使用 visual studio 来理智地调试异步代码,因为它不会破坏我想要的地方。例如,在这段代码中:

using System;
using System.Threading.Tasks;

namespace TestNS{
class Program {
static void Main(string[] args) {
Foo().Wait(); // sadly, it breaks here
}

static async Task Foo() {
var foo = 42;
if (foo == 42) {
throw new Exception(); // want it to break here
}
}
}
}

如何让 Visual Studio 在抛出异常的地方自动中断,而不是在我的程序顶部?或者等价地,在不重新启动进程的情况下,我可以跳转到该上下文并查看那些局部变量的值吗?

我了解根本问题是异常在技术上由幕后异步代码处理,因此 VS 不会将它们视为未处理。当然没有其他人喜欢这种行为,并且有一种方法可以告诉 VS 并没有真正捕获到异步调用的异常......我试过转向“只是我的代码”,“当这个异常出现时中断”抛出”等,断断续续,但没有任何帮助。

我不是在寻找包括编辑我的代码或手动添加断点的解决方案。同样,以特殊方式处理某些异常也不是真正的解决方案。并不是所有我想要中断的异常都来 self 自己的代码;通常它会来自字典中丢失的键,或类似的东西。 开发代码时总是会出现意外异常,我想轻松查看程序状态,而无需手动放置断点和/或 try/catch 代码,重新运行程序,手动推进程序直到我碰巧进入功能。而且,这一切都是在我什至可以让它再次触发的假设下进行的,而我对它最初发生的原因一无所知。然后针对开发过程中可能发生的每个异常执行此操作。

最重要的是,如果您正在查看确实返回的 AggregateException,甚至没有一个好方法来找出该异常的来源。您必须“查看详细信息”,然后展开异常,展开内部异常,将鼠标悬停在堆栈跟踪上,记住文件和行号,关闭详细信息,手动转到正确的位置,现在放置手动断点并手动进行调试。为什么系统不能使用此堆栈跟踪来做正确的事情?

我将所有这些详细信息放入其中,因为我已经阅读了 20 篇关于类似主题的其他 SO 帖子。他们没有把所有这些细节都放在里面,人们似乎很开心,所以我很困惑我做错了什么。在开发非异步代码时,这些都不会发生。我在上面执行的所有步骤都是必要的吗?就检查异常上下文而言,使编写异步代码与编写非异步代码一样愉快的最佳实践是什么?

最佳答案

您需要使用 CTRL + ALT + E 激活公共(public)语言运行时异常,如下图所示。

enter image description here

关于c# - 在 visual studio 中调试异步 C#;按预期打破异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55308905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com